2014-02-09 2 views
3

Я использую Visual Studio 2013ifstream не в состоянии открыть

Так что я должен открыть файл .ppm изображения и сделать какую-то работу на нем, но ifstream я пытаюсь использовать для чтения данных не удается открыть файл изображения. Я уверен, что файл изображения находится в рабочем каталоге (я создал и прочитал некоторые простые .txt-файлы, чтобы убедиться). И даже после чрезмерного исследования я не могу понять, что происходит.

Вот соответствующий код

EDIT: Я добавил еще немного кода, чтобы получить представление о том, что я пытаюсь сделать

Image * PPMImageReader::read(std::string filename){ 

     std::string line; 
     int width, height, max_val; 


     std::ifstream src(filename, std::ios_base::binary); 



     if (src.fail()) { //failbit is always set but not badbit 
      perror("Logical error on i/o operation. failbit was set\n"); 
      if (src.bad()) 
       perror("Read/writing error on i/o operation. badbit was set"); 
     } 
     if (!src.is_open()) { //and of course this return true 
      printf("File was not opened\n"); 
      exit(1); 
     } 

    //Edited 

    getline(src, line, '\n'); 

     if (line.empty()) 
      getline(src, line); 

     if (line.find("P6") == std::string::npos) { 
      printf("wrong format\n"); 
      exit(1); 
     } 
+2

Я уверен, что путь к файлу неверен. Можете ли вы попробовать с жестким кодированием абсолютного пути? Даже если у вас есть файл в рабочем каталоге, каталог запуска приложения может отличаться. –

+0

@Digital_Reality Он работает с использованием абсолютного пути, но это не очень удобно, так как имя файла является аргументом командной строки. Извините мое невежество, но что такое каталог запуска? – Velix

ответ

1

Как из обсуждалось стало известно проблема относительный путь.

поддержки fstream относительные пути, как показано ниже ..

Рассмотрим следующий случай, когда ваш входной файл один уровень вверх, чем исполняемый файл.

E:\MyProgramBin\YourExe.exe 
E:\YourInputFile.ppm 

В этом случае вы можете создать свое имя файла, как показано ниже.

filename1 = "..\YourInputFile.ppm" 

и использовать его filename1 в ifstream

std::ifstream src(filename1, std::ios_base::binary); 
Смежные вопросы