回 帖 发 新 帖 刷新版面

主题:请问Delphi中如何编写一个数据库文件备份程序?

请问Delphi中如何编写一个数据库文件备份程序?
我编写的程序如下:
procedure TMainForm.MenuDBBackupClick(Sender: TObject);
var
  DefaultFileName,BackupName,EndPath,FilenameStr:string;
  OpStruc:TSHFileOpStruct;
  frombuf,tobuf:array[0..128]of char;
begin
  //判断数据文件是否存在
  if fileexists(STPath)=false then
  begin
    Application.MessageBox('数据库文件不存在!!','提示',MB_OK or MB_ICONERROR);
    exit;
  end;
  //选择保存路径和文件名
  DefaultFileName:='All'+formatdatetime('yymmddhhmmam/pm',now);
  SaveDatabaseDialog.FileName:=DefaultFileName;
  SaveDatabaseDialog.InitialDir:=GetExePath;
  if SaveDatabaseDialog.Execute then
  begin
    EndPath:=ExtractFilePath(SaveDatabaseDialog.FileName);
    BackupName:= ExtractFileName(SaveDatabaseDialog.FileName);
    fillchar(frombuf,sizeof(frombuf),0);
    fillchar(tobuf,sizeof(tobuf),0);
    StrPCopy(frombuf,STPath);
    StrPCopy(tobuf,EndPath);
    with opstruc do
    begin
      Wnd:=Handle;
      wFunc:=FO_COPY;
      pFrom:=@frombuf;
      PTo:=@tobuf;
      fFlags:=FOF_NOCONFIRMATION OR FOF_RENAMEONCOLLISION;
      fAnyoperationsAborted:=false;
      hNameMappings:=Nil;
      lpszProgressTitle:=Nil;
    end;
    ShFileOperation(OpStruc);
    FilenameStr := ExtractFileName(STPath);
    BackupName := ChangeFileExt(BackupName, '.BAK');
    if not RenameFile(EndPath+FilenameStr, BackupName) then
    begin
      raise Exception.Create('无法创建备份文件');
      exit;
    end;
    Application.MessageBox('数据库备份成功!','提示',MB_OK or MB_ICONERROR);
  end;
end;


function RenameFile(const OldName, NewName: string): Boolean;
begin
{$IFDEF MSWINDOWS}
  Result := MoveFile(PChar(OldName), PChar(NewName));
{$ENDIF}
{$IFDEF LINUX}
  Result := __rename(PChar(OldName), PChar(NewName)) = 0;
{$ENDIF}
end;


但是每次RenameFile的返回值都是False,请问有谁能告诉我哪里写错了?

回复列表 (共2个回复)

沙发

__rename(PChar(OldName), PChar(NewName)) = 0
应该是这里吧!


如果是成功了  rename(PChar(OldName), PChar(NewName))返回的是1  和0 不相等
出来的就是FALSE了吧!

板凳

那该怎么修改啊?
那个群我已经加过来,不过要身份验证,我的QQ77027126,你们加我吧,谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册