2012-04-18 1 views
0

я пытаюсь открыть файл сЧто сделало бы ios :: fail() оценят 1?

27 string tline; 
28 ifstream finp; // input file 
29 ifstream dinp; // data files 
30 
31 finp.open(argv[1]); 
32 
33 
34 cout << "finp.good() = " << finp.good() << endl; 
35 cout << "finp.bad() = " << finp.bad() << endl; 
36 cout << "finp.fail() = " << finp.fail() << endl; 

и я в конечном итоге с выходом

finp.good() = 0 
finp.bad() = 0 
finp.fail() = 1 

сейчас, я не могу найти хорошую документацию о том, что вызвало бы это кроме того, что это внутреннее логическая проблема. что я должен сделать, чтобы исправить это?

Если это помогает, я бегу на linux, где мне нужно включить оба <cstring> и <cstdlib>, в то время как мне не нужно делать это при работе на OSX. может ли это быть проблемой? если да, то как это исправить?

ответ

1

простите меня, я сделал простую ошибку. когда я портировал исходные файлы на систему linux, я портировал и скрипт. я сбивал с толку исполняемый файл со сценарием, и скрипт имел жестко закодированное имя файла, которое не было в каталоге.

В основном, я случайно пытался прочитать файл, которого там не было!

2

fail() вернет 1, когда вы попытаетесь выполнить преобразование, и это не удастся. Например, если следующий символ в файле - это нечто иное, чем цифра, и вы пытаетесь прочитать int, тогда будет установлен битбит, и fail() вернется 1. Любое преобразование было предпринято, когда вы уже в конце файл также установит failbit.

fail() также будет возвращен 1, если/если установлен badbit. Это настроено на то, чтобы сигнализировать о серьезной проблеме с самим файлом, а не просто неспособность прочитать некоторые данные из файла.