2016-12-16 68 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