1

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

我正在使用以下代码尝试在 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;

请参阅以下链接。如果有人可以转换代码。问题应该得到解决。 如何在使用 c# 打开时复制 pst 文件

4

2 回答 2

2

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

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

于 2014-02-04T17:58:17.750 回答
0

Try the fmShareDenyNone flag when creating the TFileStream object:

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

Function to read the date from a file:

function GetFileDate(TheFileName: string): string;
var
  FHandle: integer;
begin
  FHandle := FileOpen(TheFileName, fmShareDenyNone);
  try
    Result := DateTimeToStr(FileDateToDateTime(FileGetDate(FHandle)));
  finally
    FileClose(FHandle);
  end;
end;
于 2014-02-04T15:28:34.100 回答