第三节 标准IO函数说明

标准IO函数:软件级别的操作函数

fopen:打开一个文件

    #include <stdio.h>
    FILE *fopen(const char *path, const char *mode);

    path:打开文件的路径
    mode:打开文件的权限
        r:只读,文件定位在开头
        r+:读写,文件定位在开头
        w:只写,并且会将内部内容清空,文件定位在开头,文件不存在会被创建
        w+:读写,文件不存在会被创建,文件定位在开头
        a:只写,文件定位在末尾,如果不存在会被创建
        a+:读写,文件定位在末尾,如果不存在会被创建

    返回值:
        成功返回一个文件指针
        失败返回NULL

fclose:关闭文件指针

    #include <stdio.h>
    int fclose(FILE *stream);

    stream:文件操作指针

    返回值:
    成功返回0
    失败返回EOF

fread:读取文件内容

    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    ptr:读取的内容存放到哪里
    size:每一块数据的大小
    nmemb:多少块数据
    stream:文件指针

返回值:
    函数正常返回读取到的块数,以下这几种情况将会返回不等于块数的返回值:
        A、文件读到末尾了,剩余的内容不够读满那么多块,那他就会返回读到多少块整块,而后面不满一块的内容,虽然已经读了,但是他不会记录在总数中
            调用feof判断文件是否到达末尾
        B、文件读取出错了
            调用ferror判断文件是否出错

fwrite:写入数据到文件中

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                 FILE *stream);
    ptr:写入的内容
    size:每一块数据的大小
    nmemb:多少块数据
    stream:文件指针

返回值:
    函数正常返回写入的块数,以下这一种情况将会返回不等于块数的返回值:
        文件写入出错了
        调用ferror判断文件是否出错

ferror函数:判断文件出错

    int ferror(FILE *stream);
    判断文件操作是否出错
    如果出错返回真(非0值)

feof:判断文件操作是否到达文件末尾

int feof(FILE *stream);
判断文件操作是否到达文件末尾
如果到达则返回真

clearerr:

void clearerr(FILE *stream);
清楚文件操作中的错误标志,以不至于每次调用ferror都判断出错

ftell:测量当前位置到文件开头的距离

    long ftell(FILE *stream);

fseek:偏移文件的操作位置

    int fseek(FILE *stream, long offset, int whence);
    stream:文件指针
    offset:偏移多少个字节
    whence:从哪里开始偏移
    SEEK_SET, SEEK_CUR, or SEEK_END

    返回值:
        成功返回0
        失败返回-1

rewind:将操作位置直接定位到文件开头

    void rewind(FILE *stream);

    fdopen:通过文件描述符调用标准IO的借口,返回一个文件指针
    FILE *fdopen(int fd, const char *mode);
    fd:文件描述符
    mode:打开的权限(同fopen)
    注意:这个权限应该跟open打开的权限一致

    返回值:
    返回一个操作指针

freopen:重新一个文件打开

    FILE *freopen(const char *path, const char *mode, FILE *stream);
    用于重新用新的权限打开一个一样的文件
    path:文件路径
    mode:文件的权限
    stream:文件之前打开的文件指针

    返回值:
    返回一个新的文件操作指针
    失败返回NULL

fileno:获取对应的文件指针的文件描述符

    int fileno(FILE *stream);

fflush:清除缓冲区

fprintf:

    打印指定内容到文件指针当中
    int fprintf(FILE *stream, const char *format, ...);
    stream:你想要打印的文件指针
    format:数据格式,之后这段内容会打印到stream当中
    ...:变参函数的参数

dprintf:打印指定内容到文件描述符当中

    int dprintf(int fd, const char *format, ...);
    fd:你想要答应的文件描述符
    format:数据格式,之后这段内容会打印到stream当中
    ...:变参函数的参数

    #include <stdarg.h>

        int vprintf(const char *format, va_list ap);
        int vfprintf(FILE *stream, const char *format, va_list ap);
        int vdprintf(int fd, const char *format, va_list ap);
        int vsprintf(char *str, const char *format, va_list ap);
        int vsnprintf(char *str, size_t size, const char *format, va_list ap);


        以上函数跟printf等函数用法跟意义一致,只是他们用配合变参函数的参数列表来引用
        va_list:这个是变参函数的数据指针(链表头)

fscanf:从指定的文件指针中获取格式化数据

    int fscanf(FILE *stream, const char *format, ...);
    stream:文件指针
    format:指定格式
    ...:存入的参数(地址)

int fgetc(FILE *stream);

    从steam中获取一个字符

char *fgets(char *s, int size, FILE *stream);

    从stream专用获取一行(如果一行超过size的大小,则size这么大)存放到s中

int getc(FILE *stream);

    从steam中获取一个字符(宏函数,最好用fgetc)

int getchar(void);

    从键盘获取一个字符

int ungetc(int c, FILE *stream);

    反向往stream中扔入一个字符到steam的缓冲区中

int fputc(int c, FILE *stream);

    往steam中写入一个字符c

int fputs(const char *s, FILE *stream);

    往stream中写入s数据

int putc(int c, FILE *stream);

    往steam中写入一个字符c

int putchar(int c);

    往屏幕输出一个字符c

int puts(const char *s);

    往屏幕输出s数据

课后习题

目录索引(将目录里面的所有文件打印出来)
<think>好的,用户想了解文件IO函数的使用方法,并希望有示例代码。首先,我需要确定用户使用的编程语言。根据提供的引用内容,用户提到了C/C++的stdio.h头文件和FILE结构体,以及open函数,这应该是指C语言中的文件操作。所以,我应该重点介绍C语言的文件IO函数。 接下来,我需要整理基本的文件操作流程:打开、读写、关闭。用户可能需要知道如何打开文件,不同的模式(如读、写、追加),以及如何读写内容。同时,用户提到权限问题,比如在打开文件时需要赋予写权限,否则写入失败,这也是需要注意的点。 然后,考虑示例代码部分。需要分别展示fopen、fread/fwrite、fgets/fputs、fscanf/fprintf的使用方法。每个示例应该简洁明了,附带注释说明。例如,写入文件时使用fopen的"w"模式,读取时用"r",追加用"a"。还要注意错误处理,比如检查文件指针是否为NULL。 另外,用户可能对文本模式和二进制模式的区别不太清楚,需要简要说明。比如,使用"wb"或"rb"来处理二进制文件,比如图片或视频。 最后,生成相关问题,帮助用户进一步学习。可能的问题包括不同模式的区别、错误处理的最佳实践、二进制文件操作,以及C与C++在文件IO上的差异。 需要确保引用的内容正确对应,比如引用[3]提到FILE结构体和fopen,引用[4]提到权限问题,这些都要在适当的地方标注引用标识。同时,保持回答结构清晰,分步骤讲解,让用户能够逐步理解和应用。</think>### 文件IO函数使用方法及示例代码 文件IO(输入输出)函数是操作文件系统的核心工具,主要用于文件的创建、读写、关闭等操作。以下是C语言中文件IO函数的使用方法及示例: --- #### 一、基本流程与函数说明 1. **打开文件** 使用`fopen`函数,需指定文件路径和打开模式: ```c FILE *fopen(const char *filename, const char *mode); ``` 常用模式: - `"r"`:只读(文件必须存在) - `"w"`:只写(创建新文件或清空已有文件) - `"a"`:追加(在文件末尾添加内容) - `"r+"`:读写(文件必须存在) - `"w+"`:读写(创建新文件或清空已有文件)[^3] 2. **读写文件** - 文本读写:`fprintf`、`fscanf`、`fgets`、`fputs` - 二进制读写:`fread`、`fwrite` 3. **关闭文件** 使用`fclose`释放资源: ```c int fclose(FILE *stream); ``` --- #### 二、示例代码 ##### 示例1:写入文本文件 ```c #include <stdio.h> int main() { FILE *fp = fopen("test.txt", "w"); // 以写入模式打开文件 if (fp == NULL) { perror("文件打开失败"); return 1; } fprintf(fp, "Hello, World!\n"); // 写入格式化文本 fputs("第二行内容\n", fp); // 写入字符串 fclose(fp); // 关闭文件 return 0; } ``` ##### 示例2:读取文本文件 ```c #include <stdio.h> int main() { FILE *fp = fopen("test.txt", "r"); // 以只读模式打开文件 if (fp == NULL) { perror("文件打开失败"); return 1; } char buffer[100]; while (fgets(buffer, sizeof(buffer), fp) != NULL) { // 逐行读取 printf("%s", buffer); } fclose(fp); return 0; } ``` ##### 示例3:二进制文件操作(写入结构体) ```c #include <stdio.h> struct Student { int id; char name[20]; }; int main() { FILE *fp = fopen("data.bin", "wb"); // 二进制写入模式 if (fp == NULL) { perror("文件打开失败"); return 1; } struct Student s = {1, "Alice"}; fwrite(&s, sizeof(struct Student), 1, fp); // 写入结构体数据 fclose(fp); return 0; } ``` ##### 示例4:追加内容到文件 ```c FILE *fp = fopen("log.txt", "a"); // 追加模式 fprintf(fp, "[日志] 新事件发生\n"); fclose(fp); ``` --- #### 三、注意事项 1. **权限检查** 若以`"w"`或`"a"`模式打开文件,需确保文件路径有写权限,否则操作失败[^4]。 2. **错误处理** 每次操作后检查返回值,例如`fopen`返回`NULL`表示失败。 3. **二进制与文本模式区别** 在Windows系统中,文本模式会自动转换换行符(`\n` → `\r\n`),而二进制模式不会[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值