我可以在 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
在其他地方创建指向此文件的硬链接并打开它而不是原始文件。这样原始文件(实际上也是硬链接)和包含它的文件夹可以重命名/删除,但文件本身仍然可以访问。请注意,此方法对底层文件系统类型、硬链接位置和访问权限有一些限制。
我有一个连续读取日志文件的 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
在其他地方创建指向此文件的硬链接并打开它而不是原始文件。这样原始文件(实际上也是硬链接)和包含它的文件夹可以重命名/删除,但文件本身仍然可以访问。请注意,此方法对底层文件系统类型、硬链接位置和访问权限有一些限制。