我已经看到了Windows系统中使用临时文件来增加某些任务的性能。这些文件都标有0x100的属性,当我看着他们。我有以下文字来自微软:“

  

通过使用的CreateFile()与   FILE_ATTRIBUTE_TEMPORARY标志,你让   该系统知道该文件是   可能是短暂的。该   临时文件被创建为一个正常   文件。该系统需要做的最小   懒惰的金额写入文件   系统来保持磁盘结构   (目录和等)保持一致。   这使外观的   文件已被写入到磁盘   。“

创建用Delphi这样的临时文件的任何例子?

感谢。

[编辑]

补充问题:这可能是使用这样的文件,示例的上下文中,可以将它用于日志系统。日志是这个文件具有临时属性?难道是更快,更容易记忆,当日志变得非常大?

[编辑]

确定我有使用由下面schnaader与FILE_ATTRIBUTE_TEMPORARY给定溶液创建文件:

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

创建时,这样的文件获取量0x120属性。因此,根据系统中的临时文件。

我还创建与FILE_FLAG_DELETE_ON_CLOSE标志文件(看到这篇文章L.奥斯特曼)。

所以:

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

此文件获取没有属性,并且当该应用程序被关闭或销毁的文件被自动删除。

我没有找到如何将属性和标志结合起来。任何想法?

由于

有帮助吗?

解决方案

那么,如何使用CreateFile()方法

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);

要与FILE_FLAG_DELETE_ON_CLOSE结合标志,使用or

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

其他提示

在临时标志只是表明你想要写磁盘要的尽可能晚地的。这是相当你想要的日志文件,相反,只要你愿意得到的文件写入safly到磁盘的内容,所以你甚至可以在系统发生故障的情况下对其进行访问。

要来自 MSDN页面来回引述的CreateFile( )

  

指定FILE_ATTRIBUTE_TEMPORARY属性导致文件系统,以避免写入数据回海量存储是否有足够的高速缓冲存储器是可用的,因为应用程序删除临时文件的句柄被关闭之后。在这种情况下,该系统可以完全避免写数据。虽然它不直接以同样的方式如前面提到的标志控制数据缓存中,FILE_ATTRIBUTE_TEMPORARY属性确实让系统尽可能保持在系统缓存中没有写,因此可能对于某些应用的关注。

在我看来,你只使用它,如果它真的是临时的数据,你要删除反正你用它做之后,如事情你会写%TEMP%目录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top