2016-12-16 4 views
1

У меня есть эта строка кодаC++ изменить каталог ofstream с строкой буфера файла

std::ofstream output(p_strFilename.c_str()); 

где p_strFilename определяется из параметра функции

foo(const std::string &p_strFilename) 

который спасительной кучу файлов в текущий рабочий каталог. Однако я хочу ввести шаг внутри этого каталога и сохранить файлы внутри. Я попытался

std::ofstream output("folder1\\"+p_strFilename.c_str()) 

это дает мне

error: invalid operands of types ‘const char [9]’ and ‘const char*’ to binary ‘operator+’ 

, который я думаю читает каталог как 9 символов вместо того, чтобы в виде строки.

Первый вопрос: это правильный способ ввода каталога? (двойная обратная косая черта и начиная с CWD, а не из домашнего каталога)

Второй вопрос: как я могу решить свою ошибку компиляции?

ответ

0

Я думаю, что вам нужно преобразовать в c_string только после конкатенации:

std::ofstream output(("folder1/"+p_strFilename).c_str()) 

Надеется, что это помогает! :)

+0

@RawN он должен, если: 1. p_strFilename имеет тип станд :: строки и 2. выход() принимает "константный символ *" в качестве параметра. Почему, по вашему мнению, он не компилируется? – Brutus

+0

@RawN Если p_strFilename имеет тип «const char *», как это может быть p_strFilename.c_str() работает? Я думал, что c_str() был методом std :: string type ... – Brutus

+0

, хотя это удалило мою ошибку компиляции, что происходит сейчас, так это то, что файлы все еще сохраняются в cwd с именем «folder1 \ file1». txt "," folder1 \ file2.txt "и т. д. Как я могу решить эту проблему –

0

Не использовать .c_str().

operator+ не работает с двумя char*, вы должны использовать std::stringoperator+, чтобы добавить строки следующим образом.

std::ofstream output("folder1\\"+p_strFilename); 

(One of the two strings being concatenated must be a std::string object)

+0

вы имеете в виду + ​​p_strFilename.c_str() правильно? –

+0

@ j.doe, вы не используете c_str(), это дает вам const char *, но вам нужна строка std ::, чтобы добавить литеральную строку "folder1 \\" – Rama

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