2010-11-06 2 views
0

Есть ли причина, почему Dev C++ не позволяет мне делать file.open(file_name_variable)? Я не понимаю, почему это не позволяет мне открывать что-либо, кроме жестко заданного имени, например file.open("abc.txt"), как обойти это? Не использовать Dev C++?Я не могу открыть переменное имя файла

здесь в основном то, что у меня есть:

int open_file(string file_name){ 
    ifstream file; 
    file.open(file_name); 
    if (!file.is_open()){ 
     return 0;  
    } 
    return 1; 
} 
+3

Измените свой вопрос, чтобы включить полный, минимальный компилируемый фрагмент кода, который демонстрирует проблему. –

+0

И скажите нам, какие ошибки вы получаете или как это «не позволяет вам открыть файл». – sth

+0

@calccrypto: Это не компилируется; пожалуйста, включите функцию 'main', чтобы продемонстрировать, как вы это используете. –

ответ

6

Вы должны передать его с-строку. Использование:

file.open(file_name.c_str()); 

В C++ 11 это больше не требуется. Добавлена ​​подпись, которая принимает std::string.

+0

yep это работает. Благодаря! – calccrypto

1

fstream::open В качестве первого аргумента требуется const char *.

void open (const char * filename, 
     ios_base::openmode mode = ios_base::in | ios_base::out); 

Это не займет std::string (который является позором, кстати).
Вы должны преобразовать ваш std::string в const char *

file.open(file_name.c_str()) 
0

справа Александр, я думаю. Подпись открытого:

void open (const char * имя_файла, ios_base :: режим openmode);

Вы пытаетесь передать std :: string в качестве const char *, но std :: string не имеет оператора const char * (из соображений безопасности). Вместо этого вы должны использовать метод c_str(). Проблема заключается не в том, что неявное преобразование в const char * должно быть доступно, но в том, что basic_ifstream должно иметь открытую перегрузку, которая принимает строку - насколько мне известно, это добавляется в C++ 0x, но я не У меня нет ссылки на это.

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