delphi文件夹复制文件夹
‘壹’ 我用delphi做一个小的实验,就是复制文件,可是,复制老是不成功是怎么回事啊
程序没问题,但看你的图发现原始路径和目标路径一样,文件复制不允许自身拷贝;如果改进程序,就判断一下路径是否一致,一致时拒绝执行,给个提示更好。
‘贰’ delphi复制一个目录或文件时,显示正在复制的文件名
//********************************************************************
//功能:将FromPath路径指定的文件拷贝到ToPath指定路径下
//参数:(1)FromPath,一个完全限定的文件路径,指定源操作文件位置
//
(2)ToPath,目的文件位置,如果ToPath指定的目录不存在将自动创建它
//返回值:
1,复制操作成功完成
//
0,复制操作被取消
//
-1,复制操作执行失败
//
//
说明:ToPath中不能含有通配符
//
若FromPath指定一个文件,则ToPath可以指定一个目录或一个将创建的
//
新文件;若FromPath指定一个目录或含有通配符的路径,即使ToPath指
//
定一个新文件,ToPath也将被解析为一个目录(目录名即为新文件名)。
//*********************************************************************
function
dlgCopyFiles(FromPath,ToPath:string):Integer;
var
lpFileOP:SHFileOpStruct;
begin
lpFileOP.Wnd:=0;
lpFileOP.wFunc:=FO_COPY;
lpFileOP.pFrom:=PWideChar(FromPath+#0);
lpFileOP.pTo:=PWideChar(ToPath+#0);
//自动创建目录
lpFileOP.fFlags:=FOF_NOCONFIRMMKDIR;
Result:=SHFileOperation(lpFileOP);
if(lpFileOP.fAnyOperationsAborted)then
Result:=0
else
begin
if(Result=0)then
Result:=1
else
Result:=-1;
end;
end;
‘叁’ Delphi 怎么制作复制文件夹程序
如问题所描述的,将C:abc 做成变量,代码可以如下编写:
procereTForm1.btn1Click(Sender:TObject);
varsSource,sTarget:string;
begin
sSource:='c:abc';
sTarget:='d:abc';
WinExec('x'+sSource+''+sTarget+'/s/e',SW_HIDE);
end;
‘肆’ 用delphi复制文件夹
procere findAll(tmp:string;ss:TStrings);
var
sc:TSearchRec;
begin
if FindFirst(tmp+'\*.*',faAnyFile,sc)=0 then
begin
repeat
if (sc.Attr and faDirectory)=sc.Attr then
if sc.Name[1]<>'.' then
findAll(tmp+'\'+sc.Name+'\*.*',ss)
else
else
ss.Append(tmp+'\'+ sc.Name);
until FindNext(sc)<>0;
end;
FindClose(sc)
end;
这个函数是找tmp目录下面的所有文件,然后生成一个文件路径列表。
有了路径列表
for i:=0 to sl.count-1 do
begin
file(sl[i],目标路径+extractfilename(sl[i]));
end;
好了 have fun
‘伍’ delphi复制文件夹并覆盖-要求必须覆盖的
使用下面的函数即可,此函数使用了SHFileOperation API函数。代码如下:
FunctionCopy_Dir(SourceDir,DestDir:String;nLx:Integer):Boolean;
Var
Opstruc:TshFileOpStruct;
frombuf,tobuf:Array[0..128]ofChar;
begin
FillChar(frombuf,Sizeof(frombuf),0);
FillChar(tobuf,Sizeof(tobuf),0);
StrP(frombuf,SourceDir);
CasenLxof
1:
StrP(tobuf,DestDir);
end;
WithOpstrucDo
Begin
Wnd:=0;
CasenLxof
1:wFunc:=FO_COPY;
2:wFunc:=FO_DELETE;
ElsewFunc:=FO_COPY;
end;
pFrom:=@frombuf;
pTo:=@tobuf;
fFlags:=FOF_NOCONFIRMATION;
fAnyOperationsAborted:=False;
hNameMappings:=Nil;
lpszProgressTitle:=Nil;
end;
try
ShFileOperation(OpStruc);
Result:=True;
except
Result:=False;
end;
end;
需要引用单元uses shellapi;
测试代码:
Copy_Dir('c:aa','d:',1);
SHFileOperation函数说明
函数功能描述:文件操作,与 Shell 的动作相同.
函数原型:
#include<shellapi.h>
WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT
lpFileOp);
参数:
typedef struct _SHFILEOPSTRUCT
{
HWND
hwnd; //父窗口句柄
UINT
wFunc; //要执行的动作
LPCTSTR
pFrom;
//源文件路径,可以是多个文件
LPCTSTR
pTo;
//目标路径,可以是路径或文件名
FILEOP_FLAGS
fFlags; //标志,附加选项
BOOL
fAnyOperationsAborted; //是否可被中断
LPVOID
hNameMappings;
//文件映射名字,可在其它 Shell 函数中使用
LPCTSTR
lpszProgressTitle; // 只在 FOF_SIMPLEPROGRESS
时,指定对话框的标题。
} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;
wFunc 可以为:
/FO_MOVE
0x0001移动文件
FO_COPY
0x0002复制文件
FO_DELETE
0x0003删除文件,只使用 pFrom
FO_RENAME
0x0004文件重命名
fFlags可以为:
FOF_MULTIDESTFILES
0x0001//pTo
指定了多个目标文件,而不是单个目录
FOF_CONFIRMMOUSE
0x0002
FOF_SILENT
0x00044// 不显示一个进度对话框
FOF_RENAMEONCOLLISION
0x0008//
碰到有抵触的名字时,自动分配前缀
FOF_NOCONFIRMATION
0x0010// 不对用户显示提示
FOF_WANTMAPPINGHANDLE
0x0020// 填充 hNameMappings
字段,必须使用 SHFreeNameMappings 释放
FOF_ALLOWUNDO
0x0040// 允许撤销
FOF_FILESONLY
0x0080// 使用 *.* 时, 只对文件操作
FOF_SIMPLEPROGRESS
0x0100//
简单进度条,意味者不显示文件名。
FOF_NOCONFIRMMKDIR
0x0200//
建新目录时不需要用户确定
FOF_NOERRORUI
0x0400// 不显示出错用户界面
FOF_NOCOPYSECURITYATTRIBS
0x0800// 不复制 NT 文件的安全属性
FOF_NORECURSION
0x1000// 不递归目录
返回值:
函数成功返回 0 ,失败返回非 0 。
‘陆’ delphi中如何实现文件的复制
你的这个问题我来说说:
用CopyFile()函数吧。
CopyFile(pchar('c:\123.txt'),pchar('d:\123-备份.txt'),False) ;
其实作为编程,你可以选择文件并动态设置文件名:
首先你在form上添加个savefiledialg,并设置这个savefiledialg相关参数,
再在form上添加个openfiledialg ,并设置这个openfiledialg的相关参数。
然后这样编程:
if openfiledialg1.execute then
begin
if savefiledialg1.excetu then
begin
CopyFile(pchar(openfiledialg1.filename),pchar(savefiledialg1.filename),False) ;
end ;
end ;
(以上代码只是随手编写,过程是正确的,但是不保证关键字的字母排列是否正确。)
‘柒’ delphi中怎么移动文件夹,我举个例子,大家来看看
用 SHFileOperation 这个吧,它能做的事情实在太多了,在MSDN查查这个函数,相信你收获一定不少,呵呵:use Shellapi; //记得 use Shellapifunction MoveDir(const aSrc, aDst: String): Boolean;
var
sfo: TShFileOpStruct;
i: Integer;
begin
FillChar(sfo,SizeOf(TShFileOpStruct),0);
sfo.fFlags:=FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR or FOF_SILENT or FOF_ALLOWUNDO;
sfo.Wnd:=0;
sfo.wFunc:=FO_MOVE;
sfo.pFrom:=PChar(aSrc);
sfo.pTo:=PChar(aDst);
Result:=not BOOL(SHFileOperation(sfo));
end;procere TForm1.FormCreate(Sender: TObject);
begin
SHOWMESSAGE(BoolToStr(MoveDir('C:\www','D:\abcd'),True));
end;
‘捌’ delphi如何复制文件夹
可以用以下的方法:
CopyFile(pchar('c:\sql.txt'), pchar('d:\sql.txt'), True);
只要是文件的复制,都可以。
移动文件:
MoveFile(pchar('c:\sql.txt'), pchar('d:\sql.txt'));
删除文件:
DeleteFile('c:\sql.txt');
以上都是可行的。