Dos文件格式与Unix格式转换工具:
dos2unix,fromdos,todos
UNIX、DOS文件格式的区别:
在Windows下回车符是\r\n回车换行 (0x0D 0x0A)
在Linux下回车符是\n (0x0A)
fwrite写文件测试。先指定参数为wb,表示二进制格式,写入0x00-0xff共256个数,包括了ASCII码表中的所有值。 代码如下:
- int main()
- {
- char aa[256];
- int i;
- for (i=0; i<256; i++)
- {
- aa[i] = i;
- }
- FILE *wr;
- wr=fopen("asd.txt","wb");
- if (wr==NULL)
- {
- printf("wrong!\n");
- return(1);
- }
- fwrite(aa,1,256,wr);
- fclose(wr);
- return 0;
- }
得到的结果没有问题。文件属性显示大小确实为256字节。用UltraEdit来看,提示是否转为DOS格式,选择否,然后看到的结果也是正确的。
图1 图2
不过,用UltraEdit打开的时候,提示是否转为DOS格式,如果选择是,就不是图2的结果了,而是图3:
图3
文件属性也显示,文件大小为257个字节。仔细检查,发现在0x09和0x0A之间多了一个0x0D。而其他地方则是一样的。在上面的测试代码中,将二进制模式"wb"改为文本模式"wt",或者不指定模式(默认为文本模式),则得到的结果也是图3的形式。
- wr=fopen("asd.txt","wt");
因此,可以总结如下:
1. fwrite函数,加上b表示二进制模式;不加或者加上t表示文本模式。
2. fwrite用二进制模式写文件时,原样写入;文本模式写文件时,遇到换行符(0x0A,10,\n,LF,line feed),会在前面插入一个回车符(0x0D,13,\r,CR,carriage return)。
3. 另外,最好fread与fwrite相对应,统一采用文本模式或二进制模式。fread遇到\r\n,即0D0A时,会解释为0A。
这只是在windows系统下如此。关于文件格式,有一段资料非常经典。
http://linux.chinaunix.net/techdoc/system/2009/07/17/1124903.shtml
以及