2013-02-04 58 views
0

我遇到了關於數據文件的問題,這些數據文件告訴我們編寫一個函數來執行任務。在其他所有問題中,我們都會處理固定的文件名稱,例如「abc.txt」,因此這些函數不會一概而論。我想知道是否有通過數據文件將在語句中使用的字符串變量的方法:使用字符串作爲std :: fstream的文件名。

fstream file("abc.txt",ios::in|ios::out);

,並把它變成:

char str[20]="Newfile.txt"; 
fstream file(str,ios::in|ios::out); 

是否有使用的方式字符串作爲文件名與std::fstream?我試過使用一個字符串,但沒有創建這樣的文件,雖然程序的編譯沒有顯示任何錯誤。

+1

你碰巧看[性病:: fstream的參考] (http://en.cppreference.com/w/cpp/io/basic_fstream/basic_fstream)? – ChiefTwoPencils

+1

1)術語* string *不明確,最好說* character array *或* std :: string *,2)在輸入和輸出中使用相同的fstream並不是一個好主意,3)您應該找到一些對於這個基本問題來說,這是很好的參考 - 如果你的課程文本不包含它們 – Beta

回答

6

這取決於編譯器。這樣的工作始終堅持:

void do_something(std::string const &filename) { 

    std::fstream(filename.c_str()); 
    // ... 
} 

這樣可與新的(C++ 11)編譯器,而不是舊的:

void do_something(std::string const &filename) { 

    std::fstream(filename); 
    // ... 
} 
+0

好的。但是有沒有其他的方法呢?這將在舊版本中工作..?什麼可能甚至不使用變量,而是泛化的FN()我做..? – user2038517

+0

@ user2038517:我展示的第一個函數可以讓你指定要打開的文件的名稱,該函數應該可以在任何C++編譯器中工作,除非它極其*古代(即,早於'std :: string')完全)。 –

+1

傑裏的第一個解決方案可以在老版本中使用,就像他說的。你不能*推廣沒有變量的函數 - 它如何知道打開哪個文件? – us2012