读书人

处置txt文件中内容为什么不能识别出回

发布时间: 2013-10-01 12:15:56 作者: rapoo

处理txt文件中内容为什么不能识别出回车?
写了个代码,是读取一个txt文件中的内容,加密处理后输出到同名enc文件中。
现在我遇到的问题是,txt中好几行的内容,到enc中全合成一行了,我看了下,就是换行没有被识别出来。另外再enc的末尾还会多一个字符,随着txt中内容的变化,这最后多的一个字符也还不一样
我检查了我的代码,没看出问题啊,请教大神看看啊
其中读取输出的代码如下

 ifstream infile("F:\\Fall 2013\\CS 620\\P1.txt"); 
ofstream outfile("F:\\Fall 2013\\CS 620\\P1.enc");

if(!infile){
fatal("%s\n", "Unable to open infile");
}

if(!outfile){
fatal("%s\n", "Unable to open outfile");
}

char e;
while (infile.peek()!=EOF) { //while (!infile.eof())
infile>>e;
e=c.encode(e);
outfile<<e;
}
infile.close();
outfile.close();


类中加密的声明如下
char Cipher::encode( char ch ) {
int n=ch;
if (n>=97&&n<=122)
n=n-32-65;
else if(n>=65&&n<=90)
n=n-65;
else
return ch;
return ch=cipherkey[n];
}

具体实现是先生成一个随机字母cipherkey表用于替换,这里怎么生成就不贴了,和这个问题无关
[解决办法]
windows的换行符\n在txt文件中会转化成2个字符\r\n
用文本方式读写,系统会自动转换。
如果按二进制方式读写,需要自己处理。
[解决办法]
你读取的方式是文本方式,那么读到1个\n的时候,不要把这个字符转换,直接写回文件。
还有1个办法,每次用string读一行(这样会丢弃\n),处理string中每个字符,变换后写到新的文件,再添加一个\n到新的文件,重复读一行的步骤,直到文件结束 。
[解决办法]
infile>>e; 用>>读一个字符会丢弃\n,而继续读去下一个字符
用e = infile.get() 或者 infile.get(e)

读书人网 >C++

热点推荐