2010-03-22 2 views
3

У меня есть следующий код:Чтение потока в C++

ifstream initFile; 
    initFile.open("D:\\InitTLM.csv"); 
    if(initFile.is_open()) 
    { 

     // Process file 

    } 

Файл не открывается. Файл существует на диске D :. Есть ли способ узнать, почему именно этот файл не может быть найден? Как «ошибка»?

+1

Вы можете сначала попытаться поместить InitTLM.csv в каталог программы и выполнить 'initfile.open (" inittlm.csv "); вместо того, чтобы ссылаться на букву диска. Затем сообщите нам, если ошибка по-прежнему сохраняется. – JonH

+1

Не используйте '\' в качестве seporator, он добавляет еще один уровень неясности в код, поскольку он является символом escape. Вы имели в виду «\\» или вы имели в виду «\\\\». Windows приняла «/» в качестве справочника каталогов с Windows XL. Используя его, вы удаляете слой вопросов, на который нам не нужно отвечать. –

ответ

1

Чтобы получить причину, вы должны использовать основной механизм отчетности об ошибках ОС (поскольку стандартная библиотека построена на примитивах ОС). Код не будет переносимым, но он должен привести вас к нижней части вашей проблемы.

Поскольку вы используете Windows, вы должны использовать GetLastError, чтобы получить необработанный код и FormatMessage, чтобы преобразовать его в текстовое описание.

0

STL не велика при возникновении ошибок отчетности. Вот лучшее, что можно сделать в рамках стандарта:

 ifstream initFile; 
    initFile.exceptions(ifstream::eofbit|ifstream::failbit|ifstream::badbit); 
    try 
    { 
     initFile.open("D:\\InitTLM.csv"); 
     // Process File 
    } 
    catch(ifstream::failure e) 
    { 
     cout << "Exception opening file:" << e.what() << endl; 
    } 

По моему опыту, сообщение, возвращенное, что(), как правило, бесполезно.

0

Проверьте права доступа к корню диска D :. Вы можете обнаружить, что ваш скомпилированный исполняемый файл или служба, в которой работает ваш отладчик, не имеют достаточных прав доступа для открытия этого файла.

Временно замените разрешения на каталог D: \ root на «Все -> Полный доступ» и выясните, устраняет ли это проблему.

Смежные вопросы