首先,我们需要了解一下文件操作函数,它们是我们在C语言中最常用的函数之一。这些函数的主要目的是打开、读取、写入和关闭文件。以下是最常用的文件操作函数:
fopen() - 用于打开文件。
fclose() - 用于关闭文件。
fgetc() - 用于读取文件中的一个字符。
fgets() - 用于从文件中读取一行。
fputc() - 用于将一个字符写入文件。
fputs() - 用于将一个字符串写入文件。
fprintf() - 用于格式化和写入字符串到文件。
fscanf() - 用于读取并格式化输入自文件。
现在,让我们来看看如何使用它们。让我们从最简单的开始,读取文件。
为了读取文件,我们首先要打开文件。我们使用fopen()函数来打开文件,在这个例子中,我们将打开一个.txt文件。
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("example.txt","r"); //用 "r" 表示'读'模式
if(fp == NULL) {
printf("文件打开失败");
return 1;
}
printf("文件打开成功");
fclose(fp);
return 0;
}
为了写入文件,我们可以使用fputs()函数或fprintf()函数。fputs()函数将一个字符串写入文件,而fprintf()函数用于格式化和写入字符串到文件。
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("example.txt","w"); //用 "w" 表示'写'模式
if(fp == NULL) {
printf("文件打开失败");
return 1;
}
fputs("写入文件示例", fp);
fprintf(fp, "\n%s %d %s", "这是", 233, "个好示例");
fclose(fp);
printf("文件写入成功");
return 0;
}
现在,我们已经成功地打开了一个文件并将一些内容写入了它。但是,如果我们想读取文件中的内容,该怎么办呢?我们可以使用fgetc()或fgets()函数来做到这一点。
fgetc()函数从文件中获取一个字符,而fgets()函数允许我们从文件中读取一行。以下是一个演示如何读取文件的示例:
#include <stdio.h>
int main() {
FILE *fp;
char ch;
char str[100];
fp = fopen("example.txt","r");
if(fp == NULL) {
printf("文件打开失败");
return 1;
}
printf("文件打开成功。文件内容如下:\n");
while((ch = fgetc(fp)) != EOF) {
printf("%c",ch);
}
fseek(fp, 0, SEEK_SET); //将文件指针移回开始位置
fgets(str, 100, fp); //读取文件的第一行
fputs("\n第一行是:", stdout);
fputs(str, stdout);
fclose(fp);
return 0;
}
在上面的示例中,我们使用了fgetc()函数和一个循环来读取整个文件,并使用fgets()函数来读取文件中的第一行,然后打印出来。
好了,现在你知道如何读写文件了。让我们再来看看一些其他的函数 - fputc()和fprintf()。
fputc()函数和fputs()函数很像,不同之处在于,fputc()函数写入一个字符,而fputs()函数则写入一个字符串。以下是一个使用fputc()函数写入文件的示例:
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("example.txt","w");
if(fp == NULL) {
printf("文件打开失败");
return 1;
}
char ch = 'A';
fputc(ch, fp);
fclose(fp);
printf("文件写入成功");
return 0;
}
在上述示例中,我们打开了文件并使用fputc()函数将字符’A’写入文件中。
除了fputc(),我们还可以使用fprintf()函数将格式化的字符串写入文件中。以下是一个使用fprintf()函数的示例:
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("example.txt","w");
if(fp == NULL) {
printf("文件打开失败");
return 1;
}
fprintf(fp, "这是一个带有数字和字符串的示例:%d %s", 42, "是一个好数字");
fclose(fp);
printf("文件写入成功");
return 0;
}
在上述示例中,我们使用了fprintf()函数将一个格式化的字符串写入文件中。
好的,我们已经涵盖了大部分常见的文件操作函数和用法,但还有一些需要注意的细节。
首先是文件打开模式。我们在文件打开函数fopen()中使用第二个参数来指定打开模式。第一个字符表示打开文件的模式,可以是’r’(读)或’w’(写),也可以是’a’(追加)。如果有必要,第二个字符可以被用来指定打开文件的模式,例如’b’(二进制)或’t’(文本)。以下是一些常见的文件打开模式示例:
“r” - 以只读模式打开文件。文件必须存在。
“w” - 以写模式打开文件。如果文件存在,它将被截断。如果文件不存在,它将被创建。
“a” - 以追加模式打开文件。如果文件不存在,它将被创建。
“r+” - 以读写模式打开文件。文件必须存在。
“w+” - 以读写模式打开文件。如果文件存在,它将被截断。如果文件不存在,它将被创建。
“a+” - 以读取和追加模式打开文件。如果文件不存在,它将被创建。
其次,我们需要注意的是文件指针。每个打开的文件都有一个文件指针,用于在文件中定位我们进行读写操作的位置。文件指针的位置始终指向下一个要读取或写入的字符。我们可以使用ftell()函数和fseek()函数来管理文件指针。
ftell() - 返回当前文件指针的位置。
fseek() - 将文件指针移动到指定的位置。
以下是一个示例,演示如何使用这些函数:
#include <stdio.h>
int main() {
FILE *fp;
char str[100];
fp = fopen("example.txt", "r+");
if(fp == NULL) {
printf("文件打开失败");
return 1;
}
fseek(fp, 9, SEEK_SET); //移动文件指针到第10个字符位置
fputs("测试", fp);
fseek(fp, 0, SEEK_SET); //移动文件指针到文件开头位置
fgets(str, 100, fp);
printf("文件内容:%s\n", str);
fclose(fp);
return 0;
}
在上述示例中,我们使用了fseek()函数将文件指针移动到第10个字符位置,然后使用fputs()函数在此处插入了一些文本,最后读取文件的内容并将其打印出来。
最后,我想多提几句关于错误处理的问题。当我们进行文件操作时,出现错误是非常常见的。为此,我们可以使用errno变量来获取错误码,并使用perror()函数打印出错误消息。以下是一个示例:
#include <stdio.h>
#include <errno.h>
#include <string.h> //需要使用 strerror() 函数
int main() {
FILE *fp;
fp = fopen("example.txt", "x"); //使用"x"模式来创建新文件
if(fp == NULL) {
fprintf(stderr, "无法创建文件:%s\n", strerror(errno));
return 1;
}
fputs("测试", fp);
fclose(fp);
printf("文件写入成功\n");
return 0;
}
在上述示例中,我们使用了"fopen()"函数的"x"模式来创建文件。如果文件已经存在,"x"模式将返回NULL并设置errno为EEXIST(表示文件已存在)。我们可以使用strerror()函数将errno转换为标准错误消息,并使用fprintf()函数将其打印到标准错误输出(stderr)中。
好了,这就是关于C语言中文件输入输出的基础知识了。