大家好呀!今天就带你们一起探索一下C语言里的神秘世界——“文件”!
首先,我们要知道,“文件”是C语言中用来存储和操作数据的重要工具。就像二次元世界里的魔法书一样,文件能够记录各种各样的信息,是程序员们的得力助手。
文件可以分为两大类:文本文件和二进制文件。文本文件就像是我们日常生活中的小说、漫画,能够以纯文本的形式存储和读取信息。而二进制文件则更加神奇,它可以保存任何形式的数据,就像是一本充满了各种魔法咒语的书!
文件指针
文件指针是一个特殊的指针,它用于指向文件中的某个位置。我们可以使用文件指针来读取和写入文件。
指向文件有关信息(包括文件名、状态和当前位置,保存在一个结构体变量中)的指针
在使用文件之前,需要在内存中为其分配空间,用来存放文件的基本信息。
在编写程序时,可直接使用“FILE”类型来定义变量。
文件的打开和关闭
为了能够操作这些神奇的“文件”,C语言提供了一些强大的函数供我们使用。比如,我们可以使用fopen()函数来打开一个文件并返回一个文件指针,就像是拿到了一把魔法笔;fclose()函数能够关闭文件,就像是把魔法书收进了书架;而fprintf()和fscanf()函数则是我们的神奇魔力,可以用来向文件写入数据和从文件中读取数据。
那么,让我们来看看一个简单的例子吧!假设我们要创建一个文本文件,并向其中写入一些信息。首先,我们需要使用`fopen()`函数来打开文件,像这样:
FILE *file = fopen("magic.txt", "w");
或者
FILE *fp; //fp是一个指向FILE类型的指针变量
fp = fopen("magic.txt", "w"); //文件名,使用文件方式
这里,我们使用了fopen()函数来创建一个名为"magic.txt"的文件,并指定了写入模式("w")。接着,我们可以使用fprintf()函数向文件中写入一些内容,就像是用魔法笔书写咒语一样:
fprintf(file, "Hello, File World!");
最后,别忘了使用fclose()函数来关闭文件,就像是把魔法书放回书架一样:
fclose(file);
fclose函数也带回一个值,当正常完成关闭文件操作时,返回值为0,否则返回EOP。
在程序结束之前应关闭所有文件,目的是防止因为没有关闭文件而造成的数据流失。
C语言中,EOF是个宏,在stdio.h文件中进行定义:
#define EOF (-1)
即:EOF就是整型数-1。(返回EOF即返回整形数-1)
有了这些魔法函数,我们就能够轻松地操作文件啦!不论是读取数据、写入数据,还是对文件进行其他操作,都可以通过这些函数来实现。
使用文件方式
‘r’:只读。该文件必须已存在。打开一个文本文件,只允许读数据。
‘w’:只写。打开或建立一个文本文件,只允许写数据。
‘r+’:可读可写。该文件必须已存在,写为追加在文件内容末尾。
‘rb’:只读。打开一个二进制文件,只允许读数据。
‘w+’:写读。打开创建新文件并写入数据,如果文件已存在,则覆盖写。
‘wb’:打开或建立一个二进制文件,只允许写数据。
‘a’:追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。
‘a+’:追加读写。打开文件方式与写入方式和'a'一样,但是可以读。需注意的是你若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。
文件的读写
概述
字符(每次只读一个):fputc,fgetc,
字符串:fputs,fgets,
读写磁盘文件:fprintf,fscanf,
对整块数据进行读写:fread,fwrite,
在C语言中,我们可以使用一些函数来进行文件的读写操作。这些函数可以让我们从文件中读取数据,或者将数据写入到文件中。下面是一些常用的函数。
1. fputc和fgetc函数:
#include <stdio.h>
int main() {
FILE *fp;
char c;
// 打开文件
fp = fopen("file.txt", "w");
// 写入数据到文件
fputc('H', fp);
fputc('e', fp);
fputc('l', fp);
fputc('l', fp);
fputc('o', fp);
// 关闭文件
fclose(fp);
// 打开文件
fp = fopen("file.txt", "r");
// 从文件中读取数据并输出
while ((c = fgetc(fp)) != EOF) {
printf("%c", c);
}
// 关闭文件
fclose(fp);
return 0;
}
在这个例子中,我们使用了fputc函数将字符逐个写入到文件中,然后使用fgetc函数从文件中逐个读取字符并输出。这样,我们就实现了文件的写入和读取。
一般形式:
ch = fputc(要输出的字符,fp);ch = fgetc(fp); //从fp指向的文件读入一个字符赋值给ch
2. fputs和fgets函数:
#include <stdio.h>
int main() {
FILE *fp;
char str[100];
// 打开文件
fp = fopen("file.txt", "w");
// 写入数据到文件
fputs("Hello, world!", fp);
// 关闭文件
fclose(fp);
// 打开文件
fp = fopen("file.txt", "r");
// 从文件中读取数据并输出
fgets(str, 100, fp);
printf("%s", str);
// 关闭文件
fclose(fp);
return 0;
}
在这个例子中,我们使用了fputs函数将字符串写入到文件中,然后使用fgets函数从文件中读取字符串到字符数组中并输出。这样,我们就实现了文件的写入和读取。
一般形式:
fputs(字符串,文件指针);
fgets(字符数组名,n,文件指针); //n表示所得到的字符串中字符的个数,包括'\0'
3. fprintf和fscanf函数:
#include <stdio.h>
int main() {
FILE *fp;
int num1 = 10, num2;
// 打开文件
fp = fopen("file.txt", "w");
// 写入数据到文件
fprintf(fp, "%d", num1);
// 关闭文件
fclose(fp);
// 打开文件
fp = fopen("file.txt", "r");
// 从文件中读取数据并输出
fscanf(fp, "%d", &num2);
printf("%d", num2);
// 关闭文件
fclose(fp);
return 0;
}
在这个例子中,我们使用了fprintf函数将整数写入到文件中,然后使用fscanf函数从文件中读取整数并输出。这样,我们就实现了文件的写入和读取。
一般形式:
ch = fprintf(文件类型指针,格式字符串,输出列表);
fscanf(文件类型指针,格式字符串,输入列表);
4. fread和fwrite函数:
#include <stdio.h>
int main() {
FILE *fp;
int arr1[5] = {1, 2, 3, 4, 5};
int arr2[5];
// 打开文件
fp = fopen("file.txt", "wb");
// 写入数据到文件
fwrite(arr1, sizeof(int), 5, fp);
// 关闭文件
fclose(fp);
// 打开文件
fp = fopen("file.txt", "rb");
// 从文件中读取数据并输出
fread(arr2, sizeof(int), 5, fp);
for (int i = 0; i < 5; i++) {
printf("%d ", arr2[i]);
}
// 关闭文件
fclose(fp);
return 0;
}
在这个例子中,我们使用了fwrite函数将整型数组写入到文件中,然后使用fread函数从文件中读取整型数组并输出。这样,我们就实现了文件的写入和读取。
一般形式:
fread(buffer,size,count,fp); //从fp所指的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。
fwrite(buffer,size,count,fp);
注:buffer是一个指针
通过这些函数,我们可以轻松地实现文件的读写操作。掌握了这些知识,我们就能更好地处理文件相关的任务了。
文件的定位
概述
fseek 移动文件内部位置指针。
rewind 定位文件指针,使位置指针重新返回文件的开头,无返回值。
ftell 得到流式文件中的当前位置,用相对于文件开头的位移量表示。
当然啦,这只是C语言文件世界的冰山一角。在这个神奇的世界里,还有很多其它的函数和技巧等待着我们去探索。
以上就是今天的分享啦!希望小伙伴们可以对C语言中的“文件”有更深入的了解。如果你对这个话题感兴趣的话,不妨多多研究一下,相信你会发现更多有趣的东西哦!记得多多关注我哟,我们下次再见!么么哒~(づ ̄3 ̄)づ╭❤~