2012-09-25 31 views
-1

我在打開C++中名稱中有空格的文件時遇到問題。例如,打開文件read me.txt打開名稱中有空格的文件

這是我迄今涉及一個命令讀取文件並輸出字數控制檯代碼:

string choice, word, fname; 
ifstream input; 
int l, count = 0; 

if(choice == "wc" || choice == "WC" || choice == "Wc") 
{ 
    getline(cin, fname); 
    input.open(fname.c_str()); 
    cout << fname << endl; 
    if(input.fail()) 
    { 
     cerr << " Error: failed to open the file: " << fname << endl; 
     input.clear(); 
    } 
    else 
    { 
     w = 0; 
     while (input >> word) 
      w++; 
     input.close(); 
     count = w; 
     cout << fname << " has a Word Count of: " << count << " words \n" << endl; 
    } 
} 

我知道後流功能c_str()不能讀取多個字符串空間。我正在考慮使用子字符串,但我不完全知道如何繼續。你們能幫我嗎?

+3

'c_str()'不關心空格......這裏有什麼問題? – Cornstalks

+0

你的代碼中存在一些明顯的(?)錯誤,它們會阻止它編譯(例如,在最後一行中出現'out'而不是'cout','w'無處定義等等)。請提供工作代碼。除此之外,如果我將您的代碼「修復」到我所知道的最好的代碼,它確實會處理它似乎具有空格的文件名。 –

+0

如何調試一點點......就像'cout <<「關於打開[」<< fname <<「] \ n」;'你知道,確保你的字符串是你的想法。 – paddy

回答

0

你試試這個(http://www.cplusplus.com/forum/beginner/39687/):

在一個字符串的「\」字符被解釋爲轉義代碼,讓你嵌入否則無法輸入或不可打印的字符。例如,要在文字字符串中嵌入換行符,您不能在輸入文字字符串時按Enter鍵,因爲編輯器會通過實際開始換行來響應。因此,您可以輸入「\ n」,即「這是在第一行\ n這是在第二行」。要輸入'\'字符,您需要輸入兩個斜槓來轉義它。第一個斜槓是轉義字符,第二個斜槓是嵌入的斜線字符。

例如:C:\ Program Files文件\ FILENAME.TXT

編輯: 用戶不輸入轉義字符是文件名。然後程序必須處理空間和路徑反斜槓。 \ n指定新行,但它由一個轉義字符和n個字符組成。

+0

當輸入文本作爲對getline的響應時,用戶當然不需要轉義他們的字符串。或者我誤解了你?值得注意的是(如果你編輯你的答案)「\ n''和」endl「有點多餘。 – Cornstalks

+0

對此感到抱歉。我複製並粘貼了我的代碼部分,但不知怎的,cout中的c沒有顯示出來。當我輸入cout << fname;我的問題是,當我使用fname.c_str();我無法用空格打開文件。例如吹在wind.txt無法打開... – user1696197

相關問題