现在有这样的问题。按行fgets一个文件,然后搜索要求的字符串,替换为新的字符串写回文件(比如将html文件里头的超链接改成本地路径,便于脱机链接),当然新字符串要短于旧字符串,多出来的部分可以用空格填充。
首先文件打开,fopen(const char* filename, const char* opentype);
opentype {
"r+" 读写
"w+" 读写,截断旧文件或者创建新文件(不符)
"a+" 读写,写文件尾(不符)
}
还有一个binary的模式,在linux中没有区别,但是在windows文件中有区别(换行符由\r\n两字符组成)。一般情况都不会使用b模式的。
没有选择b模式的时候:输出一个'\n',通过fputc putc fputs fprintf fwrite等调用输出到文件。系统内核将会自动生成两个字符\r\n.但是我们一点都不用担心的啊!因为对编程来说它一点影响都没有的。因为当你使用文件的时候,程序从文件获得输入,通过fgetc getc fgets fread fscanf 获得时,系统内核会自动的把\r字符去掉,你一点都不用担心会收到这个字符的了。而且文件指针也很正常使用。唯一可以看出来有点问题的地方就是文件会比预想的要稍微大一点了,因为一个换行符占了两个字节了。
选择b模式的时候:内核不会将\n转换成\r\n,并不是真正的二进制流。输入输出二进制流需要通过fwrite fread来实现。跟上面不同的时候,文件比上面的要小一点点一个换行符只占一个字节了。
当读写同时交替作用于一个文件时,我发现经常产生一些莫名的错误。经过再三的试验之后,发现当执行一个写调用后,一定要fseek(fp, 0, SEEK_CUR)才能保证后续的读调用正确的执行。原因暂时没查,不太清楚
阅读(2137) | 评论(0) | 转发(0) |