这些天在弄文件操作,不可避免的涉及到文件读写,采用了两种方式,C语言中的fopen,fwrite系列,还有就是windows api,createfile,readfile系列。
让我发现了fputs和fwrite中的陷阱:
问题是这样的,在写入文件的时候,我需要写入“回车换行”,众所周知,应该写入两个字符'\r'和'\n'
char p[20]="abc\r\nabc\r\n\0";
fputs(p,lpfile);
上面的代码执行之后,会产生什么结果呢?很显然,在你的文本文件中,应该出现两行字符,内容都是abc。
没错,当你打开文本文件的时候,确实是这样。但这是一个陷阱!!
此刻,你将你的文本文件保存,关闭,然后再打开,奇怪的事情发生了,文本文件中显示的内容发生了变化,里面只显示了一行字符:abcabc。为毛会这样呢??
用工具将文本文件用16进制打开,可以看到如下的结果。
61 62 63 0D 0D 0A 61 62 63 0D 0D 0A
看见了没?0D就是'\r',0A就是'\n',在字符abc之后,出现了2个'\r',一个'\n'。。。。。
为什么会多出一个 '\r' 呢??
我分析原因是这样:因为fputs函数,在输入'\n'的时候,会最自动在前面添加一个'\r',你自己又写入了一个'\r',所以,多出了一个。我只能这么解释了,看你们有什么高见。。。。
经实验,fwrite同样有这个问题,这纯粹是“好心帮倒忙”。。。。。
所以我放弃了c语言的文件读写函数,改用了windows api的文件读写函数。
也许这些东西你们早就知道了。。。为什么不早点告诉我。。5555