1

我需要检查文件当前是否被另一个进程打开,例如文本编辑器(但也需要应用于其他所有内容)。

我尝试使用std::ofstream::is_open()等,但这不起作用。当我的程序检查它是否打开时,我可以在我的文本编辑器中打开该文件。该程序将其视为一个关闭的文件并继续。只有当我像另一个人一样打开它时,它ofstream才会起作用。

我正在使用文件系统库来复制文件,如果文件当前没有被客户端服务器上的另一个进程写入,它们可能只会被复制(然后删除)。

真的很好奇这个。很长一段时间以来一直在想这个问题,但我自己从来没有找到一个好的方法。

我目前正在制作一个需要能够在 linux 和 windows 上运行的程序。每 5 秒它会将目录 a、b、c、d 中的所有文件复制到 x。这可以由客户端在规则中设置。在它复制了所有内容之后。所有文件都可能被删除。一天后(或客户告诉程序的任何内容),来自 x 的所有文件都需要压缩并存档在位置 y 上。因此问题是,如果将所有文件放在目录 a、b、c、d 中的其他程序现在没有触及该特定文件,则文件可能只会被删除(和复制)。希望这使问题更清楚。

在任何人开始之前。是的,我知道数据竞争条件。我暂时不关心这个。该程序对文件的内容完全不做任何事情。并且文件被其他进程关闭后,它将永远关闭。

4

1 回答 1

1

我需要检查一个文件当前是否被另一个进程打开

这在很大程度上是特定于操作系统的(并且可能没用)

所以首先阅读一本关于操作系统的好教科书

特别是在 Linux 上,您可能会使用inotify(7)工具或/proc/伪文件系统(请参阅proc(5)),或者可能使用lsof(8)。它们仅适用于本地文件系统(不适用于远程文件系统,如NFS)。另请参阅高级 Linux 编程系统调用 (2)

你可能会有惊喜(例如,一个进程被安排得如此之快,以至于删除了一个你没有时间做任何事情的文件)

对于 Windows需要更多时间阅读其文档

我目前正在制作一个需要能够在 linux 和 windows 上运行的程序。每 5 秒它会将目录 a、b、c、d 中的所有文件复制到 x。

您可能会在rsync的源代码中查找,至少是为了获得灵感。

我不明白你的实际问题是什么,但rsync可能是解决方案的一部分,据传可以在 Windows 和 Linux 上运行

于 2020-07-16T12:34:21.737 回答