【发布时间】:2014-01-21 12:33:39
【问题描述】:
在 C++ 中有什么方法可以检测文件是否已在另一个程序中打开?
我想删除和重写一些文件,但如果文件被打开,我想显示一条错误消息。我正在使用 Windows 操作系统。
【问题讨论】:
-
之前有人问过并回答过类似问题:stackoverflow.com/questions/13691603/…
在 C++ 中有什么方法可以检测文件是否已在另一个程序中打开?
我想删除和重写一些文件,但如果文件被打开,我想显示一条错误消息。我正在使用 Windows 操作系统。
【问题讨论】:
CreateFile API function可以使用CreateFile API function,共享模式为NULL,打开文件独占使用。
【讨论】:
根据“是文件打开查询”的结果采取行动是一种竞争条件(查询返回false,然后程序会在您的程序尝试删除文件之前打开文件例如)。
尝试使用DeleteFile() 删除文件,如果失败,则使用GetLastError() 显示文件删除失败的原因。请参阅System Error Codes 获取错误代码列表(ERROR_SHARING_VIOLATION 声明 “该进程无法访问该文件,因为它正被另一个进程使用。”)
【讨论】:
您可以使用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;
}
【讨论】:
#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;
}
【讨论】:
close 之间的文件,然后您尝试将其删除...
你可以使用remove("filename")函数。
【讨论】: