std::ofstream 权限被拒绝时不显示错误 C++
std::ofstream does not show error when permission denied C++
以下代码在 path = "c:\" 时不会写入文件 c:\err.txt 因为权限被拒绝。但它不会同时产生错误。相反,它输出 "OK"。
如何检查权限是否允许写入?
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
bool writeLineToErr(string path, string err_line){
std::ofstream outfile(path+"err.txt", std::ios_base::app);
if(!outfile){
cout<<"Error 1 "+path+"err.txt"+" can't open file!";
return false;
}
if(outfile.fail()){
cout<<"Error 2 "+path+"err.txt"+" can't open file!";
return false;
}
outfile << err_line << endl;
cout<<"OK";
outfile.close();
return true;
}
int main(int argc, char** argv) {
writeLineToErr("c:\","Some Line");
return 0;
}
我会说你的代码有效并且写操作实际上已经完成,但为了它,在写之后也添加一个检查:
outfile << err_line << endl;
if(outfile.fail()) cout << "Error3\n";
else cout<<"OK";
在我的系统上,如果文件没有打开写入成功,我会得到你的Error 1 ... can't open file
。
编辑: 还是您 运行 Windows Compatibility Files
虚拟化仍然有效?如果是这样,该文件可能位于 虚拟商店 ,而不是真正的 C:\err.txt
路径。
示例:C:\Users\username\AppData\Local\VirtualStore
如果您在那里找到它,您可能还会在那里找到很多其他东西。至少我几年前遇到类似问题时就这样做了。我决定手动移动(使用管理员权限)我的一些旧程序放在那里的几个重要文件,然后关闭虚拟商店。我现在找不到关于如何 关闭文件和注册表虚拟化 的简单好用的 Microsoft link 官方文档,所以也许这样做:
注册表编辑器:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\
创建一个名为 EnableVirtualization
的 DWORD
键,并为其指定值 0
。如果密钥已经存在,但设置为非零的值,请更改它。
以下代码在 path = "c:\" 时不会写入文件 c:\err.txt 因为权限被拒绝。但它不会同时产生错误。相反,它输出 "OK"。
如何检查权限是否允许写入?
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
bool writeLineToErr(string path, string err_line){
std::ofstream outfile(path+"err.txt", std::ios_base::app);
if(!outfile){
cout<<"Error 1 "+path+"err.txt"+" can't open file!";
return false;
}
if(outfile.fail()){
cout<<"Error 2 "+path+"err.txt"+" can't open file!";
return false;
}
outfile << err_line << endl;
cout<<"OK";
outfile.close();
return true;
}
int main(int argc, char** argv) {
writeLineToErr("c:\","Some Line");
return 0;
}
我会说你的代码有效并且写操作实际上已经完成,但为了它,在写之后也添加一个检查:
outfile << err_line << endl;
if(outfile.fail()) cout << "Error3\n";
else cout<<"OK";
在我的系统上,如果文件没有打开写入成功,我会得到你的Error 1 ... can't open file
。
编辑: 还是您 运行 Windows Compatibility Files
虚拟化仍然有效?如果是这样,该文件可能位于 虚拟商店 ,而不是真正的 C:\err.txt
路径。
示例:C:\Users\username\AppData\Local\VirtualStore
如果您在那里找到它,您可能还会在那里找到很多其他东西。至少我几年前遇到类似问题时就这样做了。我决定手动移动(使用管理员权限)我的一些旧程序放在那里的几个重要文件,然后关闭虚拟商店。我现在找不到关于如何 关闭文件和注册表虚拟化 的简单好用的 Microsoft link 官方文档,所以也许这样做:
注册表编辑器:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\
创建一个名为 EnableVirtualization
的 DWORD
键,并为其指定值 0
。如果密钥已经存在,但设置为非零的值,请更改它。