在Windows上,您可以创建一个没有任何名称的文件吗?

问题描述 投票:0回答:1

解决我的问题之一的理想解决方案是,给定一个驱动器(例如,分区/

_stat
st_dev
中返回什么/卷GUID),在该驱动器上物理地创建一个
HANDLE
FILE*
,可以已写入,但无法通过路径访问它(例如,没有指向它的硬链接)。当我想“提交”文件时,我可以稍后移动(/创建第一个硬链接)它,但是如果程序提前关闭,则不应该执行任何操作(并且文件是可用空间,因此可以由文件系统重用) 。这可能吗?

我目前正在通过创建

file_name + ".tmp"
来完成此操作,然后在完成后将其移动到
file_name
,但是如果出现意外的提前退出,则会留下一些
".tmp"
文件。
FILE_FLAG_DELETE_ON_CLOSE
似乎没有做我后来想要“保留”文件的事情。

我真的需要避免创建部分

file_name
,因为我正在做的是从另一个设备复制,如果出现失败,应该稍后完全重试。

这是在 NTFS 驱动器上,因此我们赞赏 NTFS 特定的解决方案。

windows file filesystems ntfs
1个回答
0
投票

Windows 允许您将文件标记为在关闭时将被删除。可以设置和删除该标志。因此,当您打开一个文件时,您需要设置一个标志 - 然后,如果您的应用程序过早关闭,该文件将被文件系统删除。写入文件完成后,您的应用程序将删除该标志并关闭文件,并且数据将保留。

要设置和删除该标志,请使用 NtSetInformationFile 函数(请参阅 MSDN是否有与 NtSetInformationFile 等效的用户空间?了解一些详细信息)。

您需要将 FileInformationClass 设置为 FileDispositionInformationEx 并使用相应的结构体(MSDN)。

该结构只有一个字段“Flags”,您需要在那里指定相应的标志。我的理解是,您需要 FILE_DISPOSITION_DELETE 和 FILE_DISPOSITION_DO_NOT_DELETE,并且我不确定 FILE_DISPOSITION_ON_CLOSE 标志在您的情况下会做什么。

© www.soinside.com 2019 - 2024. All rights reserved.