文件操作-(C语言)

文件操作

我们可以通过下面的方式声明一个文件指针。

FILE *fp;

这时候,如果我们希望对一个文件进行操作,我们需要先使用

fp = fopen(文件路径, 访问模式);

将文件指针和文件关联起来,其中第一个参数是一个字符串,对应了我们希望访问的文件路径。第二个参数是访问模式,它可以是表示只读模式的"r",也可以是表示只写模式的"w",还可以是在文件末尾追加的"a"。

当我们将文件指针和文件关联起来后,我们就可以通过fgetc(fp);获得当前指针之后位置的一个字符了,每获得一个字符,指针会向后移动一个字符(如果到达文件尾部则会返回EOF)。
我们这时通过fputc(‘c’, fp);的方式将字符’c’写入到fp关联的文件内了。

了解到这些信息后,我们就可以实现将一个文件复制到另一个文件内的函数了,例如:

void filecopy(FILE *in_fp, FILE *out_fp) {
    char ch;
    while ((ch = fgetc(in_fp)) != EOF) {
        fputc(ch, out_fp);
    }
}

这个函数接收的两个参数都是文件指针。这个函数会通过一个可读模式的文件指针逐字符地读取,并且通过一个可写模式的文件指针逐字符地将所有字符写出,从而起到复制文件内容的作用。

你需要注意,在给文件指针进行命名的时候,要避开 stdin、stdout 和 stderr 这三个名称。因为这三个名称其实已经用于标准输入、标准输出、标准错误的文件指针。
你可能会问了,那我们看到的 stdin、stdout 和 stderr 的这三个文件指针可以直接使用吗?回答是肯定的。
我们是通过 fgetc(stdin); 获得来自标准输入的字符,也可以通过 fputc(ch, stdout); 或 fputc(ch, stderr); 将变量 ch 中的字符输出到标准输出或标准错误中的。

除了fgetc和fputc之外,我们还可以使用fscanf和fprintf函数。这两个函数都很像我们已经很熟悉的scanf和printf函数,只是不过,scanf和printf 可以被看作 fscanf和fprintf 的特例。
我们使用 fscanf 从文件指针in_fp进行读取时,可以写成:

fscanf(in_fp, "%c", &a);

而如果我们写

fscanf(stdin, "%c", &a);

这将完全与下面直接使用 scanf 的方式等价。

scanf("%c", &a);

类似地,我们使用fprintf向文件指针out_fp进行写出时,可以写成:

fprintf(out_fp, "%c", a);

而如果我们写

fprintf(stdout, "%c", a);

这将完全与下面直接使用 printf 的方式等价。

printf("%c", a);

在使用文件并且确定不再继续使用后,我们要通过下面所示的方式将文件指针fp与文件的关联断开。你可以将它视为和fopen相反的一个操作。

fclose(fp);

如果你不在程序中使用fclose,程序正常结束时,程序会为所有打开的文件调用fclose。
stdin、stdout 其实也是被打开的文件指针,如果你觉得用不到的话,其实也是可以使用 fclose 将他们关闭掉的。你可以自己试一试,关闭 stdin、stdout 会对我们以前写过的程序带来什么样的影响呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值