我可以在 C++ 中读取 Windows 中的文件而不锁定包含该文件的文件夹吗
Posted
技术标签:
【中文标题】我可以在 C++ 中读取 Windows 中的文件而不锁定包含该文件的文件夹吗【英文标题】:Can I read a file in windows in c++ without locking folder containing the file 【发布时间】:2017-05-03 11:37:52 【问题描述】:我有一个持续读取日志文件的 c++ 程序(例如:C:/temp/file.txt)。但是,在程序运行时,我希望能够删除/重命名包含被监视文件的文件夹('temp')。
目前,我正在使用 CreateFile()。
CreateFile(
szFilename,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL)
每当我删除/重命名文件夹时,都会出现以下错误: "操作无法完成,因为其中的文件夹或文件已在另一个程序中打开"
有没有办法在不锁定文件的情况下读取/打开文件?
【问题讨论】:
没办法。如果您已打开文件以在文件夹中读取,则没有其他人可以使用DELETE
访问权限打开此文件夹。但这是重命名/删除所必需的
【参考方案1】:
您可以使用CreateHardLinkW
在其他地方创建指向此文件的硬链接,然后打开它而不是原始文件。这样,原始文件(实际上也是硬链接)和包含它的文件夹可以重命名/删除,但文件本身仍然可以访问。请注意,此方法意味着对底层文件系统类型、硬链接位置和访问权限的一些限制。
【讨论】:
以上是关于我可以在 C++ 中读取 Windows 中的文件而不锁定包含该文件的文件夹吗的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中读取 Windows 默认网关 IP 地址
如何从 C++/Qt 中的 .exe 和 .dlls 中读取图标(在 Windows 上)?