Delphi 如何创建临时文件(0x100)以加速应用程序

Delphi 如何创建临时文件(0x100)以加速应用程序,delphi,temporary-files,Delphi,Temporary Files,我看到Windows系统使用临时文件来提高某些任务的性能。当我查看这些文件时,它们被标记为0x100属性。我从Microsoft获得以下文本: 通过将CreateFile()与 文件\u属性\u临时标志,您允许 系统知道该文件是 很可能是短暂的 临时文件作为普通文件创建 系统需要做一个最小的 对文件的延迟写入量 保留磁盘结构的系统 (目录等)一致。 这给人的印象是 文件已写入磁盘 " 有没有使用Delphi创建此类临时文件的示例 谢谢 [编辑] 补充问题:使用此类文件的上下文可能是什么,例如,它

我看到Windows系统使用临时文件来提高某些任务的性能。当我查看这些文件时,它们被标记为0x100属性。我从Microsoft获得以下文本:

通过将CreateFile()与 文件\u属性\u临时标志,您允许 系统知道该文件是 很可能是短暂的 临时文件作为普通文件创建 系统需要做一个最小的 对文件的延迟写入量 保留磁盘结构的系统 (目录等)一致。 这给人的印象是 文件已写入磁盘 "

有没有使用Delphi创建此类临时文件的示例

谢谢

[编辑]

补充问题:使用此类文件的上下文可能是什么,例如,它是否可用于日志系统。日志是这个具有temp属性的文件吗?当日志变得非常大时,它会更快、更少内存吗

[编辑]

好的,我已经使用schnaader给出的解决方案创建了文件,文件属性为临时:

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY,
                      0); 
这样的文件在创建时会获得0x120属性。因此,需要根据系统创建临时文件

我还创建了一个带有file_FLAG_DELETE_ON_CLOSE FLAG()的文件

因此:

此文件不获取任何属性,当应用程序关闭或销毁时,会自动删除该文件

我找不到如何组合属性和标志。有什么想法吗


谢谢

那么,使用CreateFile()方法怎么样

要将标志与关闭时的文件标志删除相结合,请使用

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE,
                      0); 

临时标志只是表示您希望磁盘写入尽可能晚。这与日志文件恰恰相反,因为您希望安全地将文件内容写入磁盘,以便即使在系统出现故障时也可以访问它

引自:

指定
FILE\u属性\u TEMPORARY
属性会导致文件系统在有足够的缓存可用时避免将数据写回大容量存储,因为应用程序会在关闭句柄后删除临时文件。在这种情况下,系统完全可以避免写入数据。尽管与前面提到的标志不同,它不能直接控制数据缓存,但
文件属性\u临时属性确实告诉系统在不写入的情况下尽可能多地保存在系统缓存中,因此可能会引起某些应用程序的关注


在我看来,您只会使用它,如果它真的是临时数据,您在使用它之后无论如何都要删除它,例如,您将写入
%TEMP%
目录的内容。

好的-我需要使用此类文件的上下文,例如,它是否可以用于日志系统。日志是这个具有temp属性的文件吗?当日志变得非常大时,它会更快、更少内存吗?(请注意,我已用此补充问题编辑了我的初始问题)。谢谢,这只是一个文件。在适合使用文件的地方使用它。性能问题需要进行基准测试和其他分析,尽管人们可以做出有根据的猜测。好吧,我发现了这个问题:请参见编辑的初始问题。谢谢。谢谢你-很好的提示。您可能还想阅读本文:
var
  FileName : PChar;
  hMyFile : THandle;

...

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY,
                      0); 

if (hMyFile = INVALID_HANDLE_VALUE) then begin
  // Error
end;

...

CloseHandle(hMyFile);
hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE,
                      0);