如何创建临时文件(0x100的),从而加快应用
-
23-08-2019 - |
题
我已经看到了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到磁盘的内容,所以你甚至可以在系统发生故障的情况下对其进行访问。
指定
FILE_ATTRIBUTE_TEMPORARY
属性导致文件系统,以避免写入数据回海量存储是否有足够的高速缓冲存储器是可用的,因为应用程序删除临时文件的句柄被关闭之后。在这种情况下,该系统可以完全避免写数据。虽然它不直接以同样的方式如前面提到的标志控制数据缓存中,FILE_ATTRIBUTE_TEMPORARY
属性确实让系统尽可能保持在系统缓存中没有写,因此可能对于某些应用的关注。
在我看来,你只使用它,如果它真的是临时的数据,你要删除反正你用它做之后,如事情你会写%TEMP%
目录。