2011-03-01 41 views
0

我的代碼在此處讀取文件的路徑,對其進行修改(如果找到反斜槓,請添加額外的反斜槓),並將其寫回另一個文件。但結果是一個小錯誤。讀取文件在字符之間找到空格後結束

例如運行:

文本文件A - >c:\program files\work\exe

文本文件乙 - >c:\\program

,我期望能夠在文本文件B中的結果是這樣的:

文本文件A - >c:\\program files\\work\\exe

//read path data from text file 
char str[256]; 
fstream file_op("C:\\PROGRA~1\\logdata",ios::in); 
file_op >> str; 
file_op.close(); 

char newPath[MAX_PATH]; 
int newCount = 0; 
for(int i=0; i < strlen(str); i++) 
{ 
if(str[i] == '\\') 
    { 
    newPath[newCount++] = str[i]; 
    } 
    newPath[newCount++] = str[i]; 
} 
newPath[newCount]=0; 
ofstream out("c:\\path.txt", ios::out | ios::out); 
out.write(newPath, strlen(newPath)); 
out.close(); 
+0

解決了。我用這個 - > file_op.getline(str,256); – karikari 2011-03-01 09:13:01

回答

0

問題是:file_op >> str;這將讀取最多(但不包括)任何空白字符並將它們放入字符串中。如果你把它放在一個循環中,你會發現你會得到下一個「單詞」,但是空格會被跳過。

但還有另外一種方法。假設路徑在一條線上,你可以這樣做:

std::getline(file_op, str) 

這將讀入str的整行。

+0

編譯後,我得到這個錯誤:Error error C2780:'std :: basic_istream <_Elem,_Traits>&std :: getline(std :: basic_istream <_Elem,_Traits>&,std :: basic_string <_Elem,_Traits ,_Alloc>&,const _Elem)':期望3個參數 - 2提供\t c:\ work \ b.cpp – karikari 2011-03-01 07:30:49

+0

奇怪的是,應該有兩個參數版本。無論如何,第三個參數是一個分隔符,如果你按行分割,它應該是'\ n'。完整的東西是:'std :: getline(file_op,str,'\ n')'。希望這是有效的。 – dappawit 2011-03-01 07:35:58

+0

通過放置分隔符來修改它。但出現此錯誤:錯誤錯誤C2784:'std :: basic_istream <_Elem,_Traits>&std :: getline(std :: basic_istream <_Elem,_Traits>&,std :: basic_string <_Elem,_Traits,_Alloc>& ,const _Elem)':無法爲'std :: basic_string <_Elem,_Traits,_Alloc>&'從char [256]'\t c:\ work \ b.cpp – karikari 2011-03-01 08:19:26

相關問題