Неверное имя файла
file.open("D://New folder//testcase//Project3//conf.json",ios::in );
оно должно быть
file.open("D:/New folder/testcase/Project3/conf.json",ios::in );
или
file.open("D:\\New folder\\testcase\\Project3\\conf.json",ios::in );
И цикл while неверен
[113 ]
это должно быть
while (file.getline(a, 80))
{
cout << a << "\n";
}
См. Здесь Почему iostream :: eof внутри условия цикла считается неправильным?
Наконец, это всегда хорошая идея проверить успешность открытия файла
file.open("D:/New folder/testcase/Project3/conf.json",ios::in );
if (!file.is_open())
{
cout << "can't open file !!!\n";
return 0;
}
From checking it out I found that also errno
and also GetLastError()
do set the last error and checking them is quite helpful. For getting the string message use:
strerror(errno);
Потоки по умолчанию не генерируют исключения при ошибке, они устанавливают флаги. Вы можете сделать так, чтобы они генерировали исключения, используя функцию-член stream ():
ifstream ifs;
ifs.exceptions( std::ios::failbit ); // throw if failbit get set
Теоретически вы можете сделать что-то вроде этого:
try {
int x;
ifs >> x;
}
catch( const std::exception & ex ) {
std::cerr << "Could not convert to int - reason is "
<< ex.what();
}
К сожалению, стандарт C ++ не определяет, что генерируемые исключения содержат какие-либо сообщения об ошибках, поэтому вы находятся на конкретной территории реализации.
Краткий ответ: нет. Даже проверка errno
после обнаружения сбоя (например, с помощью bad ()
, fail ()
) после различных операций не работает надежно. Создание ifstream
/ ofstream
для переноса файла, который не может быть открыт, не обязательно устанавливает бит сбоя, пока вы не попытаетесь прочитать, записать или закрыть его.
Длинный ответ: вы можете вызвать ios :: exceptions (ios_base :: iostate)
, чтобы запросить, чтобы ios_base :: ios_failure
генерировались, когда соответствующий бит (badbit, failbit, eofbit), но это (по крайней мере, в библиотеках GNU и Microsoft C ++) не дает вам больше информации, чем ручная проверка битов, и в конечном итоге оказывается бессмысленным, ИМХО.