vol*_*vox 6 delphi temporary-files
我已经看到Windows系统使用临时文件来提高某些任务的性能.当我查看它们时,这些文件标有0x100属性.我收到了微软的以下文字:"
通过使用带有FILE_ATTRIBUTE_TEMPORARY标志的CreateFile(),您可以让系统知道该文件可能是短暂的.临时文件创建为普通文件.系统需要对文件系统进行最少量的延迟写入,以保持磁盘结构(目录等)的一致性.这给出了文件已写入磁盘的外观."
使用Delphi创建这样的临时文件的任何例子?
谢谢.
[编辑]
补充问题:可能是使用此类文件的上下文,例如,它可以用于日志系统.日志是这个文件的临时属性?当日志变得非常大时,它会更快,更少内存吗?
[编辑]
好的,我使用下面的schnaader给出的解决方案使用FILE_ATTRIBUTE_TEMPORARY创建文件:
hMyFile := CreateFile(FileName,
GENERIC_WRITE,
0,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_TEMPORARY,
0);
Run Code Online (Sandbox Code Playgroud)
这样的文件在创建时获得0x120属性.因此根据系统的临时文件.
我还创建了一个带有FILE_FLAG_DELETE_ON_CLOSE标志的文件(请参阅L. Osterman撰写的这篇文章).
所以:
hMyFile := CreateFile(FileName,
GENERIC_WRITE,
0,
nil,
CREATE_ALWAYS,
FILE_FLAG_DELETE_ON_CLOSE,
0);
Run Code Online (Sandbox Code Playgroud)
此文件没有属性,并且在关闭或销毁应用程序时会自动删除该文件.
我没有找到如何组合属性和标志.任何的想法?
谢谢
那么,使用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);
Run Code Online (Sandbox Code Playgroud)
要合并旗帜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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3449 次 |
| 最近记录: |