Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中检查文件是否被另一个进程使用+;?_C++_File_Filesystems_Fstream_Data Race - Fatal编程技术网

C++ 如何在C+中检查文件是否被另一个进程使用+;?

C++ 如何在C+中检查文件是否被另一个进程使用+;?,c++,file,filesystems,fstream,data-race,C++,File,Filesystems,Fstream,Data Race,我需要检查文件当前是否由其他进程打开,例如文本编辑器(但也需要应用于所有其他进程) 我尝试使用std::ofstream::is_open()等,但这不起作用。当我的程序检查文件是否打开时,我可以在文本编辑器中打开该文件。程序将其视为一个关闭的文件并继续运行。只有当我把它作为流的另一个打开时,它才会工作 我正在使用文件系统库来复制文件,只有当文件当前未被客户机服务器上的另一个进程写入时,才能复制(并在以后删除)这些文件 我对这个很好奇。我一直在想这个问题,但我自己从来没有找到一个好办法 我目前正

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

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

我正在使用文件系统库来复制文件,只有当文件当前未被客户机服务器上的另一个进程写入时,才能复制(并在以后删除)这些文件

我对这个很好奇。我一直在想这个问题,但我自己从来没有找到一个好办法

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

在任何人开始之前。是的,我知道数据竞争条件。我现在不在乎这个。程序对文件的内容完全不做任何处理。当一个文件被另一个进程关闭后,它将永远关闭

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

这是非常特定于操作系统的(可能没有用) 所以先读一篇好文章

在Linux上具体来说,您可以使用工具,或者
/proc/
伪文件系统(请参阅),或者。它们仅适用于本地文件系统(而不是远程文件系统,如)。另见和

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

对于Windows需要更多时间阅读

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

您可以查看,至少是为了获得灵感,在的源代码中。
我不明白您的实际问题是什么,但是
rsync
可能是解决方案的一部分,并且谣传它同时在Windows和Linux上运行

您试图解决的真正问题是什么?不,不是关于检查另一个进程是否打开了文件的。您认为解决方案就是检查另一个进程是否打开了该文件。不要评论您自己的问题。我相信,在微软Windows上,打开文件的过程要么自动锁定文件,要么显式锁定文件,防止文件被删除。在Linux上,删除文件根本不会影响读取它的任何其他进程。它将继续正常地读取它,即使在它被删除之后,就任何其他进程而言也是如此。因此,看起来您认为存在的问题实际上并不存在,对此不需要做任何事情。它需要在windows服务器上运行,客户机发表评论说“越来越多的客户正在切换到linux”,因此它需要能够在这两种服务器上运行。就目前而言,我知道一个大约有5分钟历史的文件不再被触碰。所以现在我要利用时间。但是,如果有一个文件正在使用中,可以独立地检查操作系统,这将是一个很好的功能。谢谢你的回答。我试过投票,但还不被允许。在这个论坛上潜伏了很长时间:)