拷贝文件夹xp可以win7不行求教[解决办法]function File_Action(fFROM, fTO: string Action: integer): Bo
拷贝文件夹xp可以win7不行
求教
[解决办法]function File_Action(fFROM, fTO: string; Action: integer): Boolean;
// 对文件进行操作
var
FData: TShFileOpStruct;
begin
FillChar(FData, SizeOf(TShFileOpStruct), 0);
FData.pFrom := pchar(fFROM + #0);
// 设立数据源路径和文件、目录名,支(?,*通配符)
if fTO <> '' then
if fTO[length(fTO)] <> '\' then
fTO := fTO + '\';
FData.pTo := pchar(fTO + #0); // 设立目标路径
case Action of
0:
FData.wFunc := FO_COPY; // copy
1:
FData.wFunc := FO_MOVE; // move
2:
FData.wFunc := FO_DELETE; // delete
3:
FData.wFunc := FO_RENAME; // rename,未使用
else
FData.wFunc := FO_COPY;
end;
FData.fFlags := FOF_ALLOWUNDO or FOF_CONFIRMMOUSE;
if ExtractFilePath(fFROM) = fTO then
FData.fFlags := FOF_RENAMEONCOLLISION;
FData.fAnyOperationsAborted := false;
FData.hNameMappings := nil;
case Action of
0:
FData.lpszProgressTitle := '复制文件'; // copy
1:
FData.lpszProgressTitle := '移动文件'; // move
2:
FData.lpszProgressTitle := '删除文件'; // delete
3:
FData.lpszProgressTitle := '重命名'; // rename
end;
Result := ShFileOperation(FData) = 0;
end;.
把AnsiChar都改成string;
[解决办法]
用这个函数,在Win7下测试通过,XP原来是可以的,不过最近没测试了,要改为移动,把FO_COPY改成FO_MOVE,要加头文件ShellAPI。
function CopyDirectory(const Source, Dest: string; const UI: Boolean = False): boolean;
{
复制目录对话框
}
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := GetActiveWindow;
wFunc := FO_COPY;
pFrom := PChar(source + #0);
pTo := PChar(Dest + #0);
if UI then
fFlags := FOF_ALLOWUNDO
else
fFlags := FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
end;
Result := (SHFileOperation(fo) = 0);
end;