C语言中文件的读写
文件的读取
文件的读取操作
1.先声明一个FILE(文件类型)的指针*fp FILE *fp,*fpm = NULL;
2.再使用fopen语句返回一个文件指针
fp = fopen("filetest.txt", "w+");
其中路径可以是相对路径也可以是绝对路径
相对路径用,用正斜杠’/’ 比如 fp = fopen("./data.txt","r");
绝对路径用,用反斜杠’\’ 比如 fp = fopen("E:\\ctest\\file\\data.txt","r");
3.路径后面紧跟一个表示读写模式的字符串
该字符串的相关表示含义如下
读写模式 | 意义 |
---|---|
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
4.使用fscanf或者fgets和fseek等函数进行文件的读取操作
fscanf的相关用法
char s[200];
long l;
float f;
char c;
//往字符串数组s中读入文件指针fp中的一个字符串
fscanf(fp,"%s",s);
//往长整型l中读入文件指针fp中的一个长整形
fscanf(fp,"%ld",&l);
//往单精度浮点型中读入文件指针fp中的一个单精度浮点
fscanf(fp,"%f",&f);
//往字符c中读入文件指针fp中的一个字符
fscanf(fp,"%c",&c);
fgets的相关用法
fgets(cache,size,fp);
- fgets是从文件流中读取一数据的函数,每次读取一行
- fgets函数遇到’\n’就会结束此次读取
- cache表示接收读入的字符串名
- size表示读入的字符数,如果文件流中一行的字符数大于size,则自动截断为多行
- fp表示需要读入数据的文件指针
- 读取完文件需要关闭文件
fclose(fp);
fgets使用示例
FILE *fp = NULL;
char buffer[256];
fp = fopen("filetest.txt", "w");
fgets(buffer, 255, (FILE*)fp);
fseek的相关用法
int fseek(FILE *stream, long offset, int fromwhere);
- 第一个参数stream为文件指针
- 第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
- 第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET 或者一个int型整数
- fseek主要用于方便的读写文件,fseek作用是移动文件的位置指针的指向位置
- 如果fseek移动位置指针成功则返回0 不成功则返回任意非零数
fseek的使用示例
//把fp文件指针移动到离文件开头100字节处;
fseek(fp,100L,SEEK_SET);
//把fp文件指针移动到离文件当前位置100字节处;
fseek(fp,100L,SEEK_CUR);
//把fp文件指针退回到离文件结尾100字节处。
fseek(fp,-100L,SEEK_END);
文件的写入
文件的写入操作
文件的写入和文件的读取前几步是一样的
1.先声明一个FILE(文件类型)的指针*fp FILE *fp,*fpm = NULL;
2.再使用fopen语句返回一个文件指针
fp = fopen("filetest.txt", "w+");
3.使用fprintf和fputs等函数进行文件的写入
fprintf的相关用法
int fprintf (FILE* stream, const char*format, [argument]);
- fprintf函数会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束(’\0’)为止。
- fprintf函数在使用上和printf函数是差不多的 唯一的区别是printf是输出到控制台而fprintf是输出到文件中
- fprintf函数和printf一样返回值是实际控制输出的字符数,包括数字,字母,标点符号,空格等。
fprintf使用示例
FILE *fp = NULL;
fp = fopen("filetest.txt", "w");
fprintf(fp, "This is testing for fprintf...\n");
fputs的相关用法
int fputs(const char *str, FILE *stream);
- str:这是一个字符数组,包含了要写入的以空字符终止的字符序列。
- stream:指向FILE对象的指针,该FILE对象标识了要被写入字符串的流。
- fputs函数的意思把字符串写入到指定的流(stream)中,但不包括空字符。
- fputs函数在成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回-1。
fputs使用示例
FILE *fp = NULL;
fp = fopen("filetest.txt", "w");
fputs("This is testing for fputs...\n", fp);
文件的读写应用
该代码为综合了文件的读取和写入等操作的示范程序
#include <stdio.h>
int main()
{
FILE *fp,*fpm = NULL;
//fopen打开文件 读写模式为w+ 返回文件指针
/**
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
**/
fp = fopen("filetest.txt", "w+");
//使用两种输出函数把数据输出到文件中
fprintf(fp, "This is a test for fprintf...\n");
fputs("This is a test for fputs...\n", fp);
//fclose 关闭文件 如果不关闭文件 而多次打开一个文件 可能会出现脏数据的问题
fclose(fp);
char buff[255];
//以只读模式 r 打开文件 返回文件指针
fpm = fopen("filetest.txt", "r");
//使用fscanf读入一个字符串 遇到空格结束
fscanf(fpm, "%s", buff);
printf("1: %s\n", buff );
//使用fgets读入一个字符串 最长(255-1)个字符 遇到\n结束 就是读入一行的数据
fgets(buff, 255, (FILE*)fpm);
printf("2: %s\n", buff );
//使用fgets读入一个字符串 最长(255-1)个字符 遇到\n结束 就是读入一行的数据
fgets(buff, 255, (FILE*)fpm);
printf("3: %s\n", buff );
fclose(fpm);
return 0;
}