Этот код должен отлавливать любую ошибку. Скорее всего, это проблема с разрешениями, если возникнут какие-либо ошибки. Убедитесь, что вы можете читать / писать в папку, в которой вы создаете файл.
#include "stdafx.h"
#include <fstream>
#include <iostream>
bool CheckStreamErrorBits(const std::ofstream& ofile);
int _tmain(int argc, _TCHAR* argv[]) {
std::ofstream ofile("c:\\test.txt");
if(ofile.is_open()) {
CheckStreamErrorBits(ofile);
ofile << "this is a test" << std::endl;
if(CheckStreamErrorBits(ofile)) {
std::cout << "successfully wrote file" << std::endl;
}
}else {
CheckStreamErrorBits(ofile);
std::cerr << "failed to open file" << std::endl;
}
ofile.close();
return 0;
}
//return true if stream is ok. return false if stream has error.
bool CheckStreamErrorBits(const std::ofstream& ofile) {
bool bError=false;
if(ofile.bad()) {
std::cerr << "error in file stream, the bad bit is set" << std::endl;
bError=true;
}else if(ofile.fail()) {
std::cerr << "error in file stream, the fail bit is set" << std::endl;
bError=true;
}else if(ofile.eof()) {
std::cerr << "error in file stream, the eof bit is set" << std::endl;
bError=true;
}
return !bError;
}
Обновление:
Я только что протестировал свой код в Windows 7 Enterprize, и он не прошел первый раз (был установлен бит сбоя). Затем я отключаю Контроль учетных записей (UAC) и снова тестирую, и он пишет файл. Это, вероятно, та же самая проблема, которую вы видите. Чтобы отключить UAC, перейдите по ссылке:
Панель управления (просмотр по маленьким значкам) | Аккаунты пользователей | Изменить настройки контроля учетных записей. Установите значение Никогда не уведомлять, затем нажмите кнопку ОК. Вам нужно будет перезапустить, чтобы изменения вступили в силу.
Мне любопытно, как заставить его работать с UAC, я посмотрю на это.