【发布时间】:2012-03-05 22:00:24
【问题描述】:
我需要向我的 Lazarus & Free Pascal GUI 程序添加一些功能 - 我还需要它来将文件从用户选择的目录复制到另一个目录。我有源目录的“选择源”TSelectDirectoryDialog 按钮 onclick 事件和目标目录的“选择目标”TSelectDirectoryDialog 按钮 onclick 事件。我有第三个按钮来进行从源到目标的复制。
到目前为止,我已经找到了复制文件和原始日期属性的 CopyFile,但它不会重新创建用户选择的源目录的任何子目录的子目录结构。实际上,我正在尝试将源目录复制到其他地方的新目录中。
我已经走到这一步了:
Public Vars :
DestDir, SourceDir : string
...
FS := TFileSearcher.Create;
FS.OnFileFound := @CopyTheFile; // CopyTheFile is my own procedure
FS.Search(SourceDir, '*', True);
...
procedure TForm1.CopyTheFile(FileIterator: TFileIterator);
var
DestinationName: String;
begin
DestinationName := IncludeTrailingPathDelimiter(DestDir) + ExtractFileName(FileIterator.FileName);
if not FileUtil.CopyFile(FileIterator.FileName, DestinationName, true) then
ShowMessage(FileIterator.FileName + ' failed to copy');
end;
谁能帮助我如何编写复制子目录及其文件的代码?我也在 Lazarus 论坛上问过这个问题:Lazarus Thread
非常感谢
泰德
【问题讨论】:
-
在 Python 中,例如,就这么简单: DestinationDirectory = os.path.join(os.getcwd(), 'DestDirPath') shutil.copytree(SourceDirectory, DestDirPath) (@987654322 @)
-
你打算只使用 Windows 平台还是需要它独立于平台?我问是因为 Windows Shell 可能会使用我猜的一个功能来完成它(同样的功能很可能有,例如 Linux)。
-
嗨,TLama。我刚刚注意到你的评论。抱歉耽搁了。我刚刚在下面发布了我自己的答案,所以请不要在上面花费任何时间。但是要回答您的问题,它必须独立于操作系统,因为它是跨平台的。我还没有更彻底地测试我的答案,但这应该在 Linux(经过测试)和 Windows(未经测试)上都能正常工作。泰德
标签: freepascal lazarus file-copying