我有一个连续读取日志文件的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)
每当我删除/重命名文件夹时,都会收到以下错误: "操作无法完成,因为其中的文件夹或文件已在另一个程序中打开"
有没有办法在不锁定的情况下读取/打开文件?
答案 0 :(得分:3)
您可以使用CreateHardLinkW
在其他位置创建此文件的硬链接,然后将其打开而不是原始文件。这样原始文件(实际上也是一个硬链接)和包含它的文件夹可以重命名/删除,但文件本身仍然可以访问。请注意,此方法意味着对基础文件系统类型,硬链接位置和访问权限的某些限制。