Следующий код, когда path = «c: \» не записывает данные в файл c: \ err.txt, потому что в разрешении отказано. Но это не выдает ошибку одновременно. Скорее, он выводит «ОК».
Как я могу проверить, позволят ли разрешения записи?
#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
Если вы найдете это там, вы можете найти там много других вещей. По крайней мере, я делал это много лет назад, когда у меня была похожая проблема. Я решил вручную переместить (с правами администратора) несколько важных файлов, которые поместили туда некоторые из моих старых программ, и затем отключить Virtual Store. Я не могу найти хорошую и простую официальную ссылку Microsoft о том, как отключить виртуализацию файлов и реестра прямо сейчас, так что, возможно, это будет делать:
RegEdit:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\
Создать DWORD
Ключ с именем EnableVirtualization
и дать ему значение 0
, Если ключ уже существует, но установлен на что-то, отличное от нуля, измените его.
Там больше здесь:
Параметры групповой политики UAC и параметры ключа реестра
Других решений пока нет …