C语言将二进制文件中内容输出到文本文件
从二进制文件中读取内容,然后写入文本文件。文件名通过命令行参数传递。
该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解
代码如下:
该程序构建后,需要通过命令行工具(cmd.exe)运行。
例如,我编译后的程序在 E:\cDemo\Debug\ 文件,需要操作的文件位于 D:\file2.txt。
注意:file2.txt 是在程序C语言将文本文件中的内容输出到二进制文件中输出的,不是手动写入的。
需要在命令行进行如下操作:

可以看到,二进制文件以文本方式输出了。
该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解
代码如下:
- #include <stdio.h>
- #define SIZE 10
- #define NAMESIZE 25
- typedef struct {
- char name[NAMESIZE];
- int midterm;
- int final;
- int homeworks;
- } student;
- // 从打开的二进制文件 fdin 读取内容,并保存到 who
- // 返回读取的字节数,或者读到文件末尾是返回 EOF
- int readastudent(FILE *fdin, student * who){
- char * p;
- char * limit = ((char *)who)+sizeof(student);
- for (p=(char *)who; p<limit; p++){
- if(feof(fdin)) return EOF;
- *p = fgetc(fdin);
- }
- return (p - (char *)who);
- }
- int main(int argc, char *argv[]){
- int n = 0; // 读取到的记录的条数
- student who; // 一条记录的缓存
- int val;
- FILE *fdin; // 输入文件
- if(argc!=2){
- printf("Usage: %s infile\n", argv[0]);
- exit(0);
- }
- if((fdin=fopen(argv[1],"r"))==NULL){
- perror("fopen");
- exit(1);
- }
- while((val=readastudent(fdin, &who))!=EOF){
- printf("%s %d %d %d\n",
- who.name, who.midterm, who.final, who.homeworks);
- n++;
- }
- printf("n=%d\n", n);
- fclose(fdin);
- }
例如,我编译后的程序在 E:\cDemo\Debug\ 文件,需要操作的文件位于 D:\file2.txt。
注意:file2.txt 是在程序C语言将文本文件中的内容输出到二进制文件中输出的,不是手动写入的。
需要在命令行进行如下操作:

可以看到,二进制文件以文本方式输出了。