gpt4 book ai didi

delphi - 如何处理临时文件?

转载 作者:行者123 更新时间:2023-12-03 15:15:24 24 4
gpt4 key购买 nike

在我的应用程序中,我的用户可以将文件(pdf/xls/doc)导入到表中或将它们导出到文件夹中。现在我想直接打开这些文件。

到目前为止我能够:- 获得一个独特的名字- 将 blob 文件保存到生成的文件中- 打开它

问题是我不知道如何删除(或更新)该文件,之后该文件将被用户关闭。

如果有人能帮助我,我会非常高兴:)

这是我的代码的快照:

procedure OpenTemporaryFile(AFileExtension: String; AKey: Integer;
AMyConnection: TMyConnection);
Var
qrDocuments : TMyQuery ;
TmpName,ExtName: string;
TempFileName: TFileStream;
begin
//Generate an unique tmp file located into user temp folder
TmpName:= FileGetTempName('~SI');
ExtName:= ChangeFileExt(TmpName, AFileExtension);
//Change files extension so that Shellexecute will be able to open the file
RenameFile(TmpName,ExtName );
//Creating the FileStream (data is fetched from an blob field)
TempFileName := TFileStream.Create(ExtName, fmOpenReadWrite );

qrDocuments := TMyQuery.create(nil);
try
qrDocuments.Connection := AMyConnection;
qrDocuments.Close;
qrDocuments.SQL.Clear;
qrDocuments.SQL.Text:='Select Id,FileName,Data from files where Id = :prId And Data IS NOT NULL';
qrDocuments.ParamByName('prId').AsInteger := AKey;
qrDocuments.open;
TBlobField(qrDocuments.FieldByName('Data')).SaveToStream(TempFileName);
finally
TempFileName.Free;
qrDocuments.free;
end;
ShellExecute(Application.Handle, 'open', Pchar(ExtName), '', '', SW_SHOWNORMAL);
DeleteFile( ExtName);
end;

最佳答案

不幸的是,目前 this answer by Remy Lebeau 有 4 票赞成,而该技术根本不适用于大多数应用程序。也许其中一位支持者可以发布一段代码片段,允许在文件仍然以 FILE_FLAG_DELETE_ON_CLOSE 标志打开的情况下使用 Acrobat Reader 打开 PDF 文件?

无论如何,您可以结合此处的一些技巧以获得最佳结果:

  • 拥有应用程序使用的临时文件的内部列表。
  • 程序关闭时,浏览临时文件列表并尝试删除它们。如果其中一些失败(因为它们仍然在外部应用程序中打开),请使用 the code gabr gave you 注册这些以便在重新启动时删除。
  • 每当您需要新的临时文件时,请首先查看内部文件列表并尝试重用其中一个。仅当失败时才创建一个新文件(并将其名称添加到列表中)。

我更喜欢这种方法来注册所有文件以在重新启动时删除,因为我不确定您的应用程序可能会打开多少个临时文件 - 也许可以使用 MOVEFILE_DELAY_UNTIL_REBOOT 注册的文件数量有限制?这是一个系统范围的资源,我只会很少使用。

关于delphi - 如何处理临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com