C语言文件操作相关函数

在实际程序运行中,我们往往需要从文件中读取数据,或者需要往文件中写入数据,那如何完成这些操作?我们就需要掌握一些文件操作函数了。

文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含:文件路径+文件名主干+文件后缀
在电脑中一个文件名为:C语言文件操作相关函数_第1张图片
但在程序中,为了与一些转移字符区分开,会这样表示一个文件名: D:/SHDownload/lrc 即将““换为”/".

文件指针

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是在stdio.h中进行文件类型申明的。(VS2008)中。
一般都是通过一个FILE*的指针来维护这个FILE *结构的变量,这样使用起来更加方便。

创建一个FILE*的指针变量:
FILE * fp ; //文件指针变量
通过文件指针变量能够找到与它关联的文件。
C语言文件操作相关函数_第2张图片

文件的打开和关闭

文件在读写之前应该先打开文件,在使用结束后应该关闭文件。使用fopen函数来打开文件,fclose来关闭文件。

文件的打开与关闭
FILE* fopen( const char * filename, const char* mode );
int fclose (FILE* stream );

打开方式也就是*mode包括很多种类,取一部分做以介绍

" r " (只读) :为了输入数据,打开一个已经存在的文本文件。
" w "(只写):为了输出数据,打开一个文本文件。
" a "(追加):向文本文件尾添加数据。

首先,我们创建一个文本文件,并在文件中写一些内容,如下:

C语言文件操作相关函数_第3张图片
然后我们以"w"只写模式打开文件,然后什么都不做,再关闭文件,看看有什么变化。

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main() {
 FILE* pf;
 pf = fopen("D:/文档/myfile.txt", "w");
 fclose(pf);
 system("pause");
 return 0;
}

C语言文件操作相关函数_第4张图片
程序运行窗口没有任何变化,但我们打开文本文档,就会发现文件中内容被清空了,所以我们可以知道,当我们以w方式打开文件的时候,会清空文件的原有内容,提醒我们在实际使用的时候一定要注意。

那以a方式打开文件呢?与刚才一样,我们在文本中输入fopen example的内容,然后执行以下操作:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include 
int main() {
 FILE* pf;
 pf = fopen("D:/文档/myfile.txt", "a");
 char str[] = "add";
 fwrite(str, 1,strlen(str), pf);
 fclose(pf);
 system("pause");
 return 0;
}

接下来运行结果会跟之前有什么不同?
C语言文件操作相关函数_第5张图片
可以看出实现了追加的功能,没有清空之前的内容。

文件的顺序读写

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输出流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输出流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
二进制输入 fread 文件
二进制输出 fwrite 文件

接下来看一下fprintf与sprintf函数的用法。

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main() {
 FILE* pf;
 pf = fope红n("D:/文档/myfile.txt", "w");
 int x = 2;
 fprintf(pf, "x=%d", x);
 fclose(pf);
 system("pause");
 return 0;
}

fprintf是往文件中输出内容。可以看出fprintf的用法与printf很相似,运行结果如下:
C语言文件操作相关函数_第6张图片
sprintf则是往一个字符数组中输出一个格式化字符串。

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main() {
 FILE* pf;
 pf = fopen("D:/文档/myfile.txt", "w");
 int x = 2;
 fprintf(pf, "x=%d", x);
 char str[1024] = { 0 };
 sprintf(str, "%d", x);
 printf("%s\n", str);
 fclose(pf);
 system("pause");
 return 0;
}

运行结果:

C语言文件操作相关函数_第7张图片
我们可以看出,sprint将一个整数2输出到了str这个字符数组中,最终打印出来了一个2,但区别在于现在这个’2’已经从一个整数变为了一个字符串。
所以我们要注意,在C语言中,如何将一个整数转换为字符串?sprintf就是方法之一。
相对应的,我们也可以用sscanf函数将一个字符串转换回整数,用法类似。

文件的随机读写

fseek 根据文件指针的位置和偏移量来定位文件指针。
int fseek( FILE * stream, long int offset, int origin );

ftell 返回文件指针相对于起始位置的偏移量
long int ftell ( FILE * stream );

rewind 让文件指针的位置回到文件的起始位置
void rewind ( FILE * stream );

你可能感兴趣的:(学习与总结)