Хорошо, поэтому я мог бы поклясться, что это сработало в моей программе раньше, но теперь меня смущает 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]
, и это, безусловно, файл, который находится в текущем рабочем каталоге. Что-то не так с тем, как я это делаю?
@KerrekSB Я изначально имел это, но это дало мне ту же проблему. Кто-то из переполнения стека был расстроен тем, что люди использовали '! Ifp', что я узнал о' ifp.fail() 'в первую очередь. – Alex
Сделайте 'ls -l Program1.S'. А затем попробуйте '$ (pwd)/Program1.S' тоже. Вы буквально управляете программой так, как вы говорите, а не через некоторую среду IDE? И распечатайте рабочий каталог из вашей программы. –
'ifp.open (имя_файла, std :: ios :: in | std :: ios :: out);' не следует компилировать в C++ 03, поскольку перегрузка, которая принимает 'std :: string', не была введена до C++ 11. см.: http://coliru.stacked-crooked.com/a/7bb98acaa0fe74d3 – NathanOliver