我正在努力寻找以下问题的答案。任何和所有的帮助将不胜感激。
我正在使用以下代码在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#
答案 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;