linux下读取windows文件遇到的问题
扫描二维码
随时随地手机看文章
1 #include
2 #include
3 int main(int argc, char *argv[])
4 {
5 char buf[1024];
6 FILE *fp ;
7 FILE *dst_fp;
8 int i,j;
9 char *line;
10 char file_name[256];
11 int space_line = 2;
12 int skip_line = 3;
13
14 for(i = 0; i < argc; i++) {
15
16 if(strcmp(argv[i],"-i") == 0){
17 strcpy(file_name,argv[i+1]);
18 break;
19 }
20 }
21
22 if((fp = fopen(file_name,"rb"))==NULL)
23 printf("Open file error!n");
24
25 dst_fp = fopen("processed_by_c.txt","wb");
26
27 i=0;
28
29 fseek(fp, 0, SEEK_SET);
30
31 while((line = fgets(buf,1024,fp)) != NULL){
32 fputs(line,dst_fp);
33 i++;
34 if(i == skip_line) {
35 i=0;
36 j=0;
37 while(j < space_line) {
38 j++;
39 fputc('r',dst_fp);
40 fputc('n',dst_fp);
41 }
42 }
43 fflush(dst_fp);
44 }
45 fclose(fp);
46 fclose(dst_fp);
47 return 0;
48
49 }
10,1 T
在windows下生成了一个数据文件a.txt, 准备在linux下进行处理并且生成一个新的文件。具体处理是将文件每隔n行空m行。
源代码如上:
经过测试发现最终生成的文件为乱码,找了好久排除了程序的逻辑问题。自己用vim重新生成了一个txt文件测试发现没有问题。于是很自然想到了字符编码的问题。
通过运行hexdump a.txt发现开头是0xfeff,而且每个字符前面都是0x00,占两个字节,明显的unicode编码,而用vim在linux下生成的确没有。
于是通过命令iconv -f unicode -t ascii -o a_new.txt a.txt 先将原来的unicode文件转化为ascii编码的文件。
运行程序,OK