检测文件是否在C ++中打开

时间:2014-01-21 12:33:39

标签: c++ windows

在C ++中是否有办法检测文件是否已在另一个程序中打开?
我想删除并重写某些文件,但是如果打开文件我想显示错误信息。我正在使用Windows操作系统。

5 个答案:

答案 0 :(得分:11)

根据“是文件打开查询”的结果采取操作是竞争条件(查询返回false然后程序在程序尝试之前打开文件删除它例如)。

尝试使用DeleteFile()删除文件,如果失败,则使用GetLastError()显示文件删除失败的原因。请参阅System Error Codes以获取错误代码列表(ERROR_SHARING_VIOLATION,其中指出“该进程无法访问该文件,因为该文件正由另一个进程使用。”

答案 1 :(得分:1)

您可以使用共享模式为NULL的CreateFile API function,这会打开该文件以供独占使用。

答案 2 :(得分:0)

您可以使用remove("filename")功能。

答案 3 :(得分:0)

#include <iostream>     // std::cout
#include <fstream>      // std::ofstream

int main () {
  std::ofstream ofs;
  ofs.open ("example.txt");
  if (ofs.is_open())
  {
    ofs << "anything";
    std::cout << "operation successfully performed\n";
    ofs.close();
  }
  else
  {
    std::cout << "Error opening file";
  }
  return 0;
}

答案 4 :(得分:0)

您可以使用is_open()检查文件是否已打开。如果是,你可以关闭它或做其他事情。 这是一个例子:

int main () 
{

  fstream filestr;
  filestr.open ("test.txt");

  if (filestr.is_open())
  {

   filestr << "File successfully open";
   filestr.close();

  }

  else
  {

   cout << "Error opening file";

  } 

 return 0;
}