2015-10-08 6 views
0

Хорошо, поэтому я мог бы поклясться, что это сработало в моей программе раньше, но теперь меня смущает std::fstream. Я просто хочу открыть файл из аргументов командной строки, т.е.Файл не открывается с помощью fstream C++ на Mac OSX

./main Program1.S

должен открыть файл Program1.S и проверить его.

Вот как я создал open_file() функцию в моем коде:

#include <string> 
#include <iostream> 
#include <fstream> 

void open_file(std::fstream &ifp, std::string file_name) { 
    ifp.open(file_name, std::ios::in | std::ios::out); 
    if(ifp.fail()) { 
     std::cout << "File not found." << std::endl; 
     exit(1); 
    } 
} 

void close_file(std::fstream &ofp) { 
    if(ofp.is_open()) { 
     ofp.close(); 
     return; 
    } 
    std::cout << "This file is not currently open" << std::endl; 
} 

int main(int argc, char * argv[]) { 
    std::string in_name; 
    in_name = argv[1]; 
    std::fstream ifp; 
    open_file(ifp, in_name); 
    // do some processing 
    close_file(ifp); 
    return 0; 
} 

Теперь я скомпилировать свою программу с помощью (к сожалению, я должен использовать C++ 03):

Компиляция работает и не дает ошибок, но при запуске программы с использованием: ./main Program1.S, он отправляется в File not found в open_file(). Я даже проверил, что было в argv[1], и это, безусловно, файл, который находится в текущем рабочем каталоге. Что-то не так с тем, как я это делаю?

+0

@KerrekSB Я изначально имел это, но это дало мне ту же проблему. Кто-то из переполнения стека был расстроен тем, что люди использовали '! Ifp', что я узнал о' ifp.fail() 'в первую очередь. – Alex

+0

Сделайте 'ls -l Program1.S'. А затем попробуйте '$ (pwd)/Program1.S' тоже. Вы буквально управляете программой так, как вы говорите, а не через некоторую среду IDE? И распечатайте рабочий каталог из вашей программы. –

+0

'ifp.open (имя_файла, std :: ios :: in | std :: ios :: out);' не следует компилировать в C++ 03, поскольку перегрузка, которая принимает 'std :: string', не была введена до C++ 11. см.: http://coliru.stacked-crooked.com/a/7bb98acaa0fe74d3 – NathanOliver

ответ

0

Проверьте, чтобы ваш файл был добавлен в папку проекта. В противном случае вам необходимо указать путь к файлу на вашем компьютере ex. Msgstr "/ Mac HD/Documents/myfile". Программа не знает, что делать с внешним именем файла без пути к файлу. Надеюсь это поможет.

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