请大家帮忙看看代码,为什么数据文件的备份有时成功,有时不成功?(100分)

  • 主题发起人 主题发起人 xiongyp
  • 开始时间 开始时间
X

xiongyp

Unregistered / Unconfirmed
GUEST, unregistred user!
新建目录情况要好一些,覆盖备份成功率低。
procedure TfrmBF.Button1Click(Sender: TObject);
var
pathS,pathN,s:String; //源文件,目标文件
FN:array[0..9] of String;
FromF, ToF: file;
i,NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if edit1.Text = '' then exit;
FN[0]:='个人.db'; //保存在执行文件目录下要备份的表
FN[1]:='记录.db';
FN[2]:='名单.db';
FN[3]:='牌价.db';
FN[4]:='利率.db';
FN[5]:='上存.db';
FN[6]:='经理.db';
FN[7]:='企业.db';
FN[8]:='备注.db';
FN[9]:='备注.MB';

s:=edit1.Text;
for i:=0 to 9 do
begin
pathS:=ExtractFilePath(application.exename)+FN;
AssignFile(FromF,pathS);
Reset(FromF,1);

if DirectoryExists(s) = false then //检查目录名是否存在
if MessageDlg('当前目录目录并不存在,要创建它吗?',mtConfirmation,
[mbOK,mbCancel],0)=mrOk then
MkDir(s)
else
exit;
if copy(s,length(s),1)<>'/' then //检查最后字符是否为"/"
s:=s+'/';
pathN:=s + FN; //得到完整的目录



AssignFile(ToF,pathN);
Rewrite(ToF, 1);
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumRead <> NumRead);
CloseFile(FromF);
CloseFile(ToF);

end;
ShowMessage('数据备份完毕!');
Close;
end;
 
copyfile(pchar(sourcefile),pchar(dfile),false);
这个函数你适适,。
 
procedure TfrmBF.Button1Click(Sender: TObject);
var
pathS,pathN,s:String; //源文件,目标文件
FN:array[0..9] of String;
FromF, ToF: file;
begin
if edit1.Text = '' then exit;
FN[0]:='个人.db'; //保存在执行文件目录下要备份的表
FN[1]:='记录.db';
FN[2]:='名单.db';
FN[3]:='牌价.db';
FN[4]:='利率.db';
FN[5]:='上存.db';
FN[6]:='经理.db';
FN[7]:='企业.db';
FN[8]:='备注.db';
FN[9]:='备注.MB';

s:=edit1.Text;
for i:=0 to 9 do
begin
pathS:=ExtractFilePath(application.exename)+FN;

if DirectoryExists(s) = false then //检查目录名是否存在
if MessageDlg('当前目录目录并不存在,要创建它吗?',mtConfirmation,
[mbOK,mbCancel],0)=mrOk then
MkDir(s)
else
exit;
if copy(s,length(s),1)<>'/' then //检查最后字符是否为"/"
s:=s+'/';
pathN:=s + FN; //得到完整的目录

  copyfile(pchar(sourcefile),pchar(dfile),false); 

  end;
ShowMessage('数据备份完毕!');
Close;
end
 
procedure TForm1.Button1Click(Sender: TObject);
var
pathS,pathN,s:String; //源文件,目标文件
FN:array[0..9] of String;
FromF: TMemoryStream;
noerr:Boolean;
i,NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if edit1.Text = '' then exit;
FN[0]:='个人.db'; //保存在执行文件目录下要备份的表
FN[1]:='记录.db';
FN[2]:='名单.db';
FN[3]:='牌价.db';
FN[4]:='利率.db';
FN[5]:='上存.db';
FN[6]:='经理.db';
FN[7]:='企业.db';
FN[8]:='备注.db';
FN[9]:='备注.MB';
try
FromF:=TMemoryStream.Create;
s:=edit1.Text;
for i:=0 to 9 do
begin
pathS:=ExtractFilePath(application.exename)+FN;
FromF.LoadFromFile(pathS);
if DirectoryExists(s) = false then //检查目录名是否存在
if MessageDlg('当前目录目录并不存在,要创建它吗?',mtConfirmation,
[mbOK,mbCancel],0)=mrOk then
MkDir(s)
else
exit;
if copy(s,length(s),1)<>'/' then //检查最后字符是否为"/"
s:=s+'/';
pathN:=s + FN; //得到完整的目录
if FileExists(pathN) then
begin
if MessageBox(Handle,'目标文件已经存在!您要覆盖吗?','提示',MB_ICONQUESTION+MB_YESNO)=idno then
begin
continue;
end
end;
FromF.SaveToFile(pathN);
end;
noerr:=True;
finally
FromF.Free;
if noerr then
ShowMessage('数据备份完毕!')
else
RaiseLastWin32Error;
end;
end;
 
后退
顶部