如何读写文件?常用的文件操作函数有哪些?

首先,我们需要了解一下文件操作函数,它们是我们在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语言中文件输入输出的基础知识了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值