在Delphi里怎么动态复制文件?(50分)

  • 主题发起人 主题发起人 enetyou
  • 开始时间 开始时间
E

enetyou

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi里怎么动态复制文件?我用函数CopyFileTo,结果发现在Delphi 7 里不行,不认这个函数,可这个函数是我在一个Delphi函数小词典里找到的啊,那么如果这个不行的话,我想Delphi里肯定提供的有复制文件的函数,谁能告诉我是哪个呢?还有如果要保存一个DbGrid里的一个表,该怎么实现?能说的详细一点吗?不胜感激哦!急用啊!
 
使用SHFileOperation()函数
如何使用请看其中第12章
http://lib.cqu.edu.cn/pcbook/FILES/PRO-DEPHI-EXPLOIN.htm
 
能详细说一下该函数的用法和作用吗?谢谢!
 
用CopyFile就行了。
function CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL; stdcall;
 
BOOL CopyFile(
LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
用法:CopyFile(PChar('C:/a.txt'),PChar('C:/temp/a.txt'),False);
其中bFailIfExists参数如果为True,那么当C:/temp/a.txt这个文件已经存在时函数就执行失败,失败情况可以通过GetLastError函数获得,如果参数为False,那么C:/temp/a.txt存在时将新复制来的文件将覆盖这个旧文件。
 
uses shellapi;
var
sPath: string;
fsTemp: SHFILEOPSTRUCT;
Flags: FILEOP_FLAGS;
i, t: integer;
begin
Flags := Flags + FOF_ALLOWUNDO;//允许Undo动作
Flags := Flags + FOF_RENAMEONCOLLISION;//冲突时重新命名
Flags := Flags + FOF_SILENT;//不显示进度
Flags := Flags + FOF_NOCONFIRMMKDIR;//创建新目录不确认
if sPath <> '' then
begin
fsTemp.Wnd := Self.Handle; //设置文件操作类型
fsTemp.wFunc := FO_COPY;
fsTemp.fFlags := Flags;
for i := 0 to FileListView.Items.Count - 1 do
//允许执行撤消操作 //////////
begin //源文件全路径名
if FileListView.Items.Item.Caption = '..' then
continue;
fsTemp.pFrom := PChar(FileListView.Items.Item.Caption + #0#0);
fsTemp.pTo := PChar(sPath + #0#0); //要复制到的路径
fsTemp.lpszProgressTitle := '拷贝文件';
if SHFileOperation(fsTemp) <> 0 then
// '文件复制不成功!';
else
// '文件复制成功!';
end;
end;
end;
 
能详细的说一下吗?我要实现的功能是当点击保存时,把一个Table复制到要保存的地方,比如要复制d盘的example.dbf文件吧,如何把它复制到选择保存的地方呢?各位上面说的方法我都试过,但总是出现问题,是在delphi7里,该怎么实现呢?请诸位大侠不吝赐教,我是生手!希望得到大家的指点哦!
 
CopyFile也有问题?啥问题?
 
多人接受答案了。
 
后退
顶部