如何使用delphi xe3复制像.pst这样的锁定文件

时间:2014-02-04 15:13:36

标签: delphi outlook delphi-xe3 locked-files

我正在努力寻找以下问题的答案。任何和所有的帮助将不胜感激。

我正在使用以下代码在outlook打开时尝试复制outlook.pst文件。我无法让它成功。 它没有给出错误,它只是没有复制文件。

copyfile('C:\Users\Administrator\Documents\Outlook Files\Outlook.pst','F:\Outlook.pst');

如果你们知道我将如何复制这样的锁定文件,请提供协助。

我试过并发现TFilestream也不起作用。

这两个是我所知道的唯一选择。任何帮助将不胜感激。

谢谢

我已经尝试了以下代码并且收到一条错误消息,指出该文件正在使用另一个进程(outlook)。

procedure TForm1.Button2Click(Sender: TObject);
var
   NewFileName: string;
   NewFile: TFileStream;
   OldFile: TFileStream;
Begin
           NewFileName:='F:\outlook.pst';
           OldFile := TFileStream.Create('C:\Users\Administrator\Documents\Outlook Files\outlook.pst', fmOpenRead or fmShareDenyWrite);
            try
              NewFile := TFileStream.Create(NewFileName, fmCreate or fmShareDenyNone);
              try
                NewFile.CopyFrom(OldFile, OldFile.Size);
              finally
                FreeAndNil(NewFile);
              end;
            finally
              FreeAndNil(OldFile);
            end;
end;

请参阅以下链接。如果有人可以转换代码。问题应该解决。 How to copy a pst file while it is open using c#

2 个答案:

答案 0 :(得分:1)

PST提供程序锁定PST文件,直到父进程终止。即使您从Outlook关闭PST文件,出于性能原因,它也将保持打开30分钟。

您是否以编程方式在Outlook中打开PST文件?

答案 1 :(得分:0)

创建TFileStream对象时尝试使用fmShareDenyNone标志:

stream := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
try 
   slFile.LoadFromStream(stream);
finally
   stream.Free;
end;

从文件中读取日期的功能:

function GetFileDate(TheFileName: string): string;
var
  FHandle: integer;
begin
  FHandle := FileOpen(TheFileName, fmShareDenyNone);
  try
    Result := DateTimeToStr(FileDateToDateTime(FileGetDate(FHandle)));
  finally
    FileClose(FHandle);
  end;
end;