C 文件操作

C 文件操作

fopen()

_CRTIMP FILE * __cdecl fopen(const char *, const char *);
第一参数为文件名,第二个参数为打开模式。
打开成功,fopen返回一个结构指针地址,否则返回一个NULL。

  • 如果没有指定文件路径,则默认为当前工作目录。
    如:FILE * fp = fopen(“c:\\temp\\test.txt”, “r”);
    由于反斜杠\是控制字符,所以必须再加一个反斜杠

  • 使用fopen()函数打开的文件会先将文件复制到缓冲区。

  • 注意:所下达的读取或写入动作,都是针对缓冲区进行存取而不是磁盘,只有当使用fclose()函数关闭文件时,缓冲区中的数据才会写入磁盘。

打开模式
打开文本文件:
r:只能从文件中读数据,该文件必须先存在,否则打开失败
w:只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件
a:向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾
r+:可读/写数据,该文件必须先存在,否则打开失败
w+:可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据
a+:可读/写数据,原来的文件不被删去,位置指针移到文件末尾
rt : 读取一个已存在的文本文件
rt+: 读写一个已存在的文本文件
       打开二进制文件的模式与打开文本文件的含义是一样的,不同的是模式名称里面多一个字母’b’,以表示以二进制形式打开文件。

fclose()

_CRTIMP int __cdecl fclose(FILE *);
关闭成功返回值0,否则返回非零值。

注意: 在执行完文件的操作后,要进行“关闭文件”操作。虽然程序在结束前会自动关闭所有的打开文件,但文件打开过多会导致系统运行缓慢,这时就要自行手动关闭不再使用的文件,来提高系统整体的执行效率。

实例

FILE *fp;
fp = fopen("c:\\temp\\test.txt", "r");
if(fp == NULL)
    printf("fail to open the file! \n");
else
{
    printf("The file is open! \n");
    fclose(fp);
}

fprintf() 和fscanf()

_CRTIMP int __cdecl fprintf(FILE *, const char *, …);
_CRTIMP int __cdecl fscanf(FILE *, const char *, …);

       它们与printf和scanf函数相仿,都是格式化读写函数。不同的是:fprintf和fscanf函数的读写对象不是终端(标准输入输出),而是磁盘文件。printf函数是将内容输出到终端(屏幕),因此,fprintf就是将内容输出到磁盘文件了。

实例

#include <stdio.h>

void main()
{
    FILE *fp;

    int num = 10;
    char name[10] = "Leeming";
    char gender = 'M';

    if((fp = fopen("info.txt", "w+")) == NULL)
        printf("can't open the file! \n");
    else
        fprintf(fp, "%d, %s, %c", num, name, gender); //将数据格式化输出到文件info.txt中

    fscanf(fp, "%d, %s, %c", &num, name, &gender); //从文件info.txt中格式化读取数据
    printf("%d, %s, %c \n", num, name, gender); //格式化输出到屏幕

    fclose(fp);
}

feof()

int feof(FILE *stream)
stream 是指向 FILE 对象的指针,该 FILE 对象标识了流。
当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。


参考文章:C语言详解 - 文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值