1.調用API函數
procedure CopyFile(FromFileName,ToFileName:string);
var
f1,f2:file;
Begin
AssignFile(f1,FromFileName); file://指定源文件名
AssignFile(f2,ToFileName); file://指定目標文件名
Reset(f1);
Try
Rewrite(f2);
Try
If Lzcopy(TfileRec(f1).handle,TfileRec(f2).Handle)<0
Then
Raise EinoutError.creat('文件復制錯誤')
Finally
CloseFile(f2); file://關閉 f2
End;
Finally
Until length(sLine)<=0;
End;
End;
2.文件流
procedure copyfile;
var f1,f2: tfilestream ;
begin
f1:=Tfilestream.Create(sourcefilename,fmopenread);
try
f2:=Tfilestream.Create(targetfilename,fmopenwrite or fmcreate);
try
f2.CopyFrom(f1,f1.size);
finally
f2.Free;
end;
finally
f1.Free;
end;
end;
3.利用內存塊讀寫buffer實現
Procudure FileCopy(const Fromfile,Tofile:string);
Var
F1,F2:file;
NumRead,Numwritten:word;
Buf:array [1..2048] of char;
Begin
AssignFile(F1,Fromfile);
Reset(F1,1);
AssignFile(F2,Tofile);
Rewrite(F2,1);
Repeat
BlockRead(F1,buf,sizeof(buf),NumRead);
BlockWrite(F2,buf,Numread,NumWritten);
Until (NumRead=0) or (NumWritten<>NumRead);
CloseFile(F1);
CloseFile(F2);
End;
一、使用文件流的方法進行拷貝,當然。同樣的道理,你也可以使用內存流等方法進行文件的拷貝,原理是一樣的。
procedure copyfile(sourcefilename,targetfilename : String);
var f1, f2: tfilestream;
begin
f1 := tfilestream.Create(sourcefilename, fmopenread);
try
f2 := tfilestream.Create(targetfilename, fmopenwrite or fmcreate);
try
f2.CopyFrom(f1, f1.Size);
finally
f2.Free;
end;
finally
f1.Free;
end;
end;
二、使用BLOCKREAD和BLOACKWRITE的方法進行文件的拷貝。
Procedure FileCopy(const Fromfile, Tofile: string);
var
F1, F2: file;
NumRead, Numwritten: integer;
Buf: array[1..2048] of char;
begin
AssignFile(F1, Fromfile);
reset(F1, 1);
AssignFile(F2, Tofile);
Rewrite(F2, 1);
repeat
BlockRead(F1, Buf, sizeof(Buf), NumRead);
BlockWrite(F2, Buf, NumRead, Numwritten);
until (NumRead = 0) or (Numwritten <> NumRead);
closefile(F1);
closefile(F2);
end;
三、使用API文件進行文件的復制
procedure CopyFile(FromFileName, ToFileName: string);
var
f1, f2: file;
begin
AssignFile(f1, FromFileName);
AssignFile(f2, ToFileName);
reset(f1);
try
Rewrite(f2);
try
if Lzcopy(TfileRec(f1).handle, TfileRec(f2).handle) < 0
then
raise EinoutError.Create('文件復制錯誤');
finally
closefile(f1);
end;
finally
closefile(f2);
end;
end;
四、Windows API函數 實現文件的拷貝
function CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL; stdcall;
參數說明:
lpExistingFileName : 原文件名稱;
lpNewFileName : 目標文件名稱
bFailIfExists : 如果文件存在,是否覆蓋原文件,True表示覆蓋;False表示不覆蓋。默認為True;
使用示例:
CopyFile(PChar(Edit1.text),PChar(Edit2.text),true);
五、使用API函數實現文件的轉移。
API原型:function MoveFile(lpExistingFileName, lpNewFileName: PChar): BOOL; stdcall;
參數:
lpExistingFileName
必選項。要移動的文件的路徑。source 參數字符串僅可在路徑的最后一個組成部分中用通配符。
lpNewFileName
必選項。指定路徑,表示要將文件移動到該目標位置。destination 參數不能包含通配符。
說明
如 果 source 包含通配符或 destination 以路徑分隔符 (\) 結束,則假定 destination 指定現有文件夾,將匹配文件移動到該文件夾中。否則,假定 destination 是要創建的目標文件。在任一種情況下,移動單個文件時,可能出現以下三種情況:
如果 destination 不存在,則進行文件移動。這是通常會發生的情況。
如果 destination 是已經存在的文件,則會出現錯誤。
如果 destination 是目錄,則會出現錯誤。
如果在 source 使用通配符,但沒有匹配文件時,也會出現錯誤。MoveFile 方法在遇到出現的第一個錯誤時停止。該方法不會撤消錯誤發生前所作的任何更改。
---------------------