windows与linux换行符问题 .
来源:互联网 发布:linux软件百度云 编辑:程序博客网 时间:2024/05/16 11:54
在Linux下的换行是/n,而在Windows下的换行是/r/n。不经过处理的话,两者的文件在显示的时候会出现问题,比如一个Linux的文本文件用Windows记事本打开的时候不会换行格式很乱,一个Windows文件在Linux下用VI打开的话会出现^M字符
windows文本文件用回车符和换行符的组合/r/n来表示行尾。
linux/unix换行符为/n
Mac文本文件用/r表示行尾
C程序使用一个/n来表示行尾,所以,如果C程序以文本视图模式处理一个windows文本文件,在读取文件时它会将/r/n转换成/n,在写入文件的时候会将/n转化成/r/n.
如果使用二进制视图,将不发生任何映射。
下面这个程序用于处理/r/n和/r的转换的问题
- /*
- * Unix/DOS换行符转换程序
- * auther:cm
- * date:2011-4-19
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /*函数声明*/
- void usage(); //用法
- void turndos(char *,char *); //将unix格式转换成dos格式
- void turnunix(char *, char *);//将dos格式转换成unix格式
- int main(int argc, char *argv[])
- {
- if (argc != 4)
- {
- //参数错误
- usage();
- exit(0);
- }
- //printf("%s,%s",argv[2],argv[3]);
- //参数判断
- if (!strcmp(argv[1],"-u")||!strcmp(argv[1],"-U"))
- turnunix(argv[2],argv[3]);
- else if (!strcmp(argv[1],"-d")||!strcmp(argv[1],"-D"))
- turndos(argv[2],argv[3]);
- else
- usage();
- return 0;
- }
- void usage()
- {
- printf("/nUsage: ud -u|-U|-d|-D srcfile dstfile/n");
- printf("/n-u|-U/tturn a dos/windows text to unix/linux form");
- printf("/n-d|-D/tturn a unix/linux text to dos/windows form");
- }
- void turnunix(char *srcfile,char *dstfile)
- {
- FILE *in,*out;
- char buf[1];
- int read = 0;
- int flag;
- //以二进制形式打开文件
- if ((in=fopen(srcfile,"rb")) == NULL)
- {
- printf("/nCan not open file %s",srcfile);
- exit(-1);
- }
- //判断文件是否已存在
- if ((out=fopen(dstfile,"rb"))!=NULL)
- {
- fclose(out);
- printf("/nERROR! dstfile %s has been existed!",dstfile);
- exit(-1);
- }
- if ((out=fopen(dstfile,"wb"))==NULL)
- {
- printf("/nCan not create dstfile %s",dstfile);
- exit(-1);
- }
- /*处理程序*/
- //从srcfile逐个复制字节到dstfile 效率有点低 不过先这么办吧/
- /*
- * 原理:当遇到/r时,检查下一个是否为/n 如果为/n 则 回退一个字节覆盖掉/r写入/n
- */
- flag = 0;
- while ((read=fread(buf,sizeof(char),1,in))>0)
- {
- if (buf[0] == '/r')
- flag = 1;
- else if (flag == 1 && buf[0]=='/n')
- {
- fseek(out,-1L,SEEK_CUR); //从当前位置回退一个字节
- flag = 0;
- }
- fwrite(buf,sizeof(char),read,out);
- }
- fclose(in);
- fclose(out);
- }
- void turndos(char *srcfile, char *dstfile)
- {
- FILE *in,*out;
- char buf[1];
- char ch = '/r';
- int read = 0;
- //以二进制形式打开文件
- if ((in=fopen(srcfile,"rb")) == NULL)
- {
- printf("/nCan not open file %s",srcfile);
- exit(-1);
- }
- //判断文件是否已存在
- if ((out=fopen(dstfile,"rb"))!=NULL)
- {
- fclose(out);
- printf("/nERROR! dstfile %s has been existed!",dstfile);
- exit(-1);
- }
- if ((out=fopen(dstfile,"wb"))==NULL)
- {
- printf("/nCan not create dstfile %s",dstfile);
- exit(-1);
- }
- /*处理程序*/
- /*遇到/n时,向文件中写入/r/n */
- while ((read=fread(buf,sizeof(char),1,in))>0)
- {
- if (buf[0] == '/n')
- {
- fwrite(&ch,sizeof(char),1,out);
- }
- fwrite(buf,sizeof(char),read,out);
- }
- fclose(in);
- fclose(out);
- }
- windows与linux换行符问题
- windows与linux换行符问题 .
- windows与linux换行符
- windows的换行符与unix(linux)的换行符
- Windows与Linux的换行符
- linux与windows回车换行符区别
- Linux系统与Windows系统中的回车与换行问题
- Linux系统与Windows系统中的回车与换行问题
- linux下与windows下的换行符linux下与windows下的换行符
- [linux] linux与windows回边换行符的区别
- Windows和linux换行符差异导致的问题
- 不同平台windows、linux、mac 上换行符的问题
- 不同平台windows、linux、mac 上换行符的问题
- windows与linux下回车与换行
- Windows与Linux下换行符的区别
- linux与windows回车换行符的区别
- linux下与windows下的换行符
- linux下与windows下的换行符
- 万年历
- Oracle中Cluster Table的使用
- 多级分类gem: awesome_nested_set
- libcurl链接库未导出符号的错误
- C语言中--字符串相关--的重要函数
- windows与linux换行符问题 .
- linux shell 字符串操作(长度,查找,替换)详解
- Android--WebView组件
- oracle cluster(簇)的简单使用
- linux read 用法 .
- Class org.apache.struts2.json.JSONWriter can not access a member of *
- malloc/free 跟new/delete的区别
- 骨骼动画入门----BVH文件的载入和播放
- PHP学习之四:类与对象