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