Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++ 如何使用boost检查文件是否已打开_C++_Boost_Boost Filesystem - Fatal编程技术网

C++ 如何使用boost检查文件是否已打开

C++ 如何使用boost检查文件是否已打开,c++,boost,boost-filesystem,C++,Boost,Boost Filesystem,如何使用boost检查文件是否已打开如果文件未打开,则删除该文件,否则什么也不做 boost::filesystem::wpath file("c://test.txt"); if(boost::filesystem::exists(file)) { if(here i want a check that file is already open or not, if open then run else) { boost::filesystem::remove(file

如何使用boost检查文件是否已打开如果文件未打开,则删除该文件,否则什么也不做

boost::filesystem::wpath file("c://test.txt");

if(boost::filesystem::exists(file))
{
   if(here i want a check that file is already open or not, if open then run else)
   {
     boost::filesystem::remove(file);
   }
   else
   {

   }
}

操作系统的工作是防止/允许这种情况发生

每个操作系统都有自己的锁定方式供独占使用,在这种情况下,删除操作无论如何都会失败

其他操作系统(POSIX)将取消文件条目与inode的链接,并且该文件保持对打开该文件的进程的访问。当最后一次使用inode时,该文件实际上被删除

简而言之,不要试图预先检测,只需查看删除是否失败。否则,您将遇到上述比赛条件


您将如何处理在您的检查和尝试删除之间打开文件的情况


你似乎没有抓住要点(看到你的回答),迈克解释说你将如何处理这种情况,在您的检查和尝试删除文件之间打开文件的位置?如果文件已打开,则我不想删除它。这就是为什么我在此处添加注释,并且我想实现一些代码,即如果文件已打开,则不删除它。@ArslanAhmed IInspectable的要点是:如果您检查时文件未打开(因此您要删除它),该怎么办,但当你试图删除它时,它已经打开了?@MikeKinghan感谢你指出,如果文件已经打开,那么什么也不做,如果没有打开,那么删除该文件。你只能通过尝试。(我担心重复这个问题无助于你理解答案。)@ArslanAhmed:请参阅,以获得更详细的解释。