C语言:文件操作

文件输入输出

使用printf()和命令行重定向>实现文件输出;使用scanf()和命令行重定向<实现文件输入。

  • hello.c
char name[256];
scanf("%s",name);
printf("Hello %s\n",name);
  • 编译
gcc Hello.c -o Hello

执行

Hello > Hi.txt
Hello < Hi.txt
Hello < Hi.txt > Hello.txt

1.fopen和fclose

1.1打开文件fopen
  • 函数原型
#include <stdio.h>
FILE *fopen(char restrict *filename, char restrict *mode);

restrict C99标准才引进的,属于类型修饰符,表示修饰的这块内存空间只能被这个指针引用和修改,除此之外别无他法。

  • 说明
    1.filename 是需要打开的文件
    2.mode是文件打开的方式
No. 打开方式 含义
1 r(read)
2 w(write)
3 a(append) 追加
4 +(plus) 读或写,主要是配合r、w、a使用
5 t(text) 文本文件(默认)
6 b(binary) 二进制文件
打开方式 含义
r 以只读的方式打开文件,前提是这个文件必须存在(只写 r 默认是文本文件)
r+ 以可读可写的方式打开文件,前提是这个文件必须存在(默认是文本文件)。
rb 以只读的方式打开一个二进制文件,前提是这个文件必须存在。
rb+ 以可读可写的方式打开一个二进制文件,前提是这个文件必须存在。
w 以只写的方式打开文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
w+ 以可读可写的方式打开文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
wb 以只写的方式打开一个二进制文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
wb+ 以可读可写的方式打开一个二进制文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
a 以追加的方式打开只写文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
a+ 以追加的方式打开一个可读可写的文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
ab 以追加的方式打开一个二进制只写文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
ab+ 以追加的方式打开一个二进制可读可写文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
  • 返回值
    如果文件顺利打开,则返回值是指向这个文件流的文件指针,如果文件打开失败,返回NULL。
1.2fclose
  • 函数原型
int flcose(FILE* stream);
  • 返回值
    如果成功释放,返回0, 否则返回EOF(-1);
    文件打开判断
FILE *fp = fopen("文件路径", "打开方式");
if(NULL != fp){
   //code 
   fclose(fp);
}

文件的读(fscanf)和写(fprintf)

  • 函数原型
int fprintf(FILE *stream, char *format, argument...);
int fscanf(FILE *stream, char *format, argument... );

fprintf()/fscanf()与printf()/scanf()使用非常相似,区别在于fprintf()/fscanf()第一个参数stream是文件描述符。

  • 将数据写入文件
int i = 10;
float f = 3.14;
char c = 'C';
char str[10] = "haha";
fprintf(fp, "%d %f %c %s\n", i, f, c, str);  
  • 将文件中的数据读出
int i = 10;
float f = 3.14;
char c = 'C';
char str[10] = "haha";
fscanf(fp, "%d %f %c %s\n", &i, &f, &c, str); 

如果不需要从文件里面写入字符串,那么就可以用逗号或者其他符号来分隔;如果文件里需要写入字符串,那么字符串与其他数据之间只能用空格和回车来分隔。

二进制读写:fread()和fwrite()

  • 函数原型
size_t fread(void *ptr, size_t size, size_t count, FILE* stream);
size_t fwrite(void *ptr, size_t size, size_t count, FILE* stream);
  • 参数说明
No. 参数 作用
1 ptr 一个指针,在fread()中是从文件里读入的数据存放的地址;在fwrite()中是写入到文件里的数据存放 的地址。
2 size 每次要读写的字节数
3 count 读写的次数
4 stream 文件指针

猜你喜欢

转载自blog.csdn.net/qq_43598865/article/details/89165978