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

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

Solutions Collecting From Web of "检测文件是否在C ++中打开"

根据“ is file open query ”的结果采取行动是一种竞争条件(查询返回false ,然后程序在您的程序试图删除它之前打开文件)。

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

 #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; } 

您可以使用共享模式为NULL的CreateFile API函数 ,该函数打开该文件以供专用。

你可以使用remove(“filename”)函数。

你可以使用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; }