我可以在 c++ 中读取 windows 中的文件而不锁定包含该文件的文件夹吗

Can I read a file in windows in c++ without locking folder containing the file

我有一个连续读取日志文件的 C++ 程序(例如:C:/temp/file.txt)。但是,虽然程序是 运行,但我希望能够 delete/rename 包含被监视文件的文件夹('temp')。

目前,我正在使用 CreateFile()。

        CreateFile(
                  szFilename,
                  GENERIC_READ,
                  FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                  NULL,
                  OPEN_EXISTING,
                  FILE_ATTRIBUTE_NORMAL,
                  NULL)

每当我 delete/rename 文件夹时,我都会收到以下错误: "The action can't be completed because the folder or file in it is open in another program"

有没有办法 read/open 一个文件而不锁定它?

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