2011-03-01 40 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

相关问题