file — std :: ofstream не показывает ошибку при отказе в разрешении переполнение стека

Следующий код, когда 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;
}

1

Решение

Я бы сказал, что ваш код работает и операция записи фактически завершена, но ради этого добавьте проверку после записи:

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 и параметры ключа реестра

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector