我可以在没有包含文件

时间:2017-05-03 11:37:52

标签: c++ windows locking createfile

我有一个连续读取日志文件的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)

每当我删除/重命名文件夹时,都会收到以下错误: "操作无法完成,因为其中的文件夹或文件已在另一个程序中打开"

有没有办法在不锁定的情况下读取/打开文件?

1 个答案:

答案 0 :(得分:3)

您可以使用CreateHardLinkW在其他位置创建此文件的硬链接,然后将其打开而不是原始文件。这样原始文件(实际上也是一个硬链接)和包含它的文件夹可以重命名/删除,但文件本身仍然可以访问。请注意,此方法意味着对基础文件系统类型,硬链接位置和访问权限的某些限制。