【发布时间】:2020-07-16 12:30:31
【问题描述】:
我需要检查一个文件当前是否被另一个进程打开,例如文本编辑器(但也需要适用于其他所有内容)。
我尝试使用std::ofstream::is_open() 等,但这不起作用。当我的程序检查它是否打开时,我可以在我的文本编辑器中打开该文件。该程序将其视为一个关闭的文件并继续。只有当我以另一个 ofstream 的身份打开它时,它才会起作用。
我正在使用文件系统库来复制文件,并且只有在客户端服务器上的另一个进程当前没有写入该文件时,它们才可能被复制(然后删除)。
真的很好奇这个。很长一段时间以来一直在想这个问题,但我自己从来没有找到一个好的方法。
我目前正在制作一个需要能够在 linux 和 windows 上运行的程序。每 5 秒它会将目录 a、b、c、d 中的所有文件复制到 x。这可以由客户端在规则中设置。在它复制了所有内容之后。所有文件都可能被删除。一天后(或客户告诉程序的任何内容),来自 x 的所有文件都需要压缩并存档在位置 y 上。因此问题是,如果将所有文件放在目录 a、b、c、d 中的其他程序现在没有触及该特定文件,则文件可能只会被删除(和复制)。希望这能让问题更清楚。
在任何人开始之前。是的,我知道数据竞争条件。我暂时不关心这个。该程序对文件的内容完全不做任何事情。并且文件被其他进程关闭后,将永远关闭。
【问题讨论】:
-
您要解决的真正问题是什么?不,不是关于检查另一个进程是否打开文件的问题。您认为解决方案是检查另一个进程是否打开了文件。
-
不要评论你自己的问题。 edit它
-
我相信在 MS-Windows 上,打开文件的进程要么最终自动锁定文件,要么明确地这样做,并防止它被删除。在 Linux 上,删除文件根本不会影响正在读取它的任何其他进程。它将继续正常读取它,即使在它被删除之后,就任何其他进程而言也是如此。所以,看起来你认为存在的问题,实际上并不存在,而且实际上不需要为此做任何事情。
标签: c++ file filesystems fstream data-race