2016-12-16 71 views
1

我有此线,其中p_strFilename从被保存一堆文件中的一个函数参数C++改变的ofstream的目录用一个字符串缓冲区文件名

foo(const std::string &p_strFilename) 

定义的代码

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

当前工作目录。不过,我想在该目录内输入一个步骤并将文件保存在里面。我试图

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是类型的std :: string和 2.输出()取 “常量字符*” 作为参数的。 为什么你认为它不会编译? – Brutus

+0

@RawN如果p_strFilename的类型是“const char *”,那么 p_strFilename.c_str() 是如何工作的?我认为c_str()是std :: string类型的一种方法... – Brutus

+0

尽管这样做删除了我的编译错误,但现在发生的情况是这些文件仍然保存在名为“folder1 \ file1”的cwd中。 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 :: string来添加文字字符串“folder1 \\” – Rama