C语言将文本文件中的内容输出到二进制文件
从文本文件中读取内容,然后写入二进制文件。文件名通过命令行参数传递。
该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解
代码如下:
例如,我编译后的程序在 E:\cDemo\Debug\ 文件,需要操作的 2 个文件位于 D 盘根目录,分别为 file1.txt、file2.txt。file1.txt 中的内容为:
小明 12 45 56
王刚 90 90 89
长生 100 100 100
需要在命令行进行如下操作:
打开file2.txt,发现是乱码,因为是以二进制方式写入的,以文本方式打开,看到的内容无实际意义。
该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解
代码如下:
#include <stdio.h> #define SIZE 10 #define NAMESIZE 25 typedef struct { char name[NAMESIZE]; int midterm; int final; int homeworks; } student; // writeastudent() 向打开的 fout 文件中写入 who(内容),返回写入的总字节数 int writeastudent(FILE *fdout, student * who){ char * p; char * limit = ((char *)who)+sizeof(student); for (p=(char *)who;p<limit;p++){ fputc(*p, fdout); } return (limit - (char *)who); } int main (int argc, char *argv[]){ int n = 0; // 记录的条数 int m; // 每条记录的字节数 student who; // 一条记录的缓存 FILE *fdin; // 输入文件 FILE *fdout; // 输出文件 if(argc!=3){ printf("Usage: %s infile outfile\n", argv[0]); exit(0); } if((fdin=fopen(argv[1],"r"))==NULL){ perror("fopen"); exit(1); } if((fdout=fopen(argv[2],"w"))==NULL){ perror("fopen"); exit(1); } while(fscanf(fdin,"%s %d %d %d", who.name, &who.midterm, &who.final, &who.homeworks)!=EOF){ m = writeastudent(fdout, &who); printf("m=%d\n", m); n++; } printf("n=%d\n", n); fclose(fdin); fclose(fdout); }该程序构建后,需要通过命令行工具(cmd.exe)运行。
例如,我编译后的程序在 E:\cDemo\Debug\ 文件,需要操作的 2 个文件位于 D 盘根目录,分别为 file1.txt、file2.txt。file1.txt 中的内容为:
小明 12 45 56
王刚 90 90 89
长生 100 100 100
需要在命令行进行如下操作:
打开file2.txt,发现是乱码,因为是以二进制方式写入的,以文本方式打开,看到的内容无实际意义。