检查一个文件是否在另一个进程中打开
有没有办法打开一个非共享独占读写访问的文件?
来自fs.watch
文件更改事件并不一定意味着该文件已被完全写入,在大多数基于节点的进程中,更多的块正在流下,或者它可能还没有被刷新。
fs.open
允许已打开并正在流式传输的文件在写入模式下无错误地打开。 可以引入超时延迟,但这太脆弱和任意。
在windows上,可以使用C语言中的FILE_SHARE_NONE
执行CreateFile
,但不能完全记得Linux上的等价物(因为如果我没有记错的话,锁是建议的),不知道OS X是否有等价物,posix或除此以外)。
您可以使用@ ronomon / opened检查文件是否在另一个进程中打开,如果有任何应用程序具有打开的句柄或文件的文件描述符。
它不会告诉你哪个应用程序打开了该文件,只是该文件在其他应用程序中打开。
它适用于Windows,MacOS和Linux,并且只需要Linux上的权限。
它使用Windows上的本地绑定以独占共享模式打开文件,以检测由于打开句柄的其他进程而导致的任何共享冲突。
在macOS和Linux上,它包装了lsof
。
据我所知,与使用诸如flock
的替代品相比, flock
只是咨询性的,所以它只有在所有进程合作检查锁时才有效,如果进程是独立的,大多数情况并非如此。
请参阅fs-ext
软件包中的flock
函数。
上一篇: Check if a file is open in another process
下一篇: Where does Visual Studio 2015 display error indicators in the solution?