C语言读写文件

C语言读写文件一:打开文件句柄//参数1:文件路径//参数2:文件打开模式函数执行成功返回文件流指针,错误返回NULL。FILE*fopen(constchar*path,constchar*mode);模式操作区别文件要求r读…

大家好,又见面了,我是你们的朋友全栈君。

一:打开文件句柄

//参数1:文件路径

//参数2:文件打开模式

函数执行成功返回文件流指针,错误返回NULL。

FILE *fopen(const char *path, const char *mode);

 

模式               操作              区别                   文件要求

r                      读            从文件头开始        文件需存在

r+                  读写          从文件头开始        文件需存在

w                    写            从文件头开始        文件不存在则创建,存在则清空

w+                 读写         从文件头开始         文件不存在则创建,存在则清空

a                     写           从文件尾开始         文件不存在进行创建,存在则追加

a+                 读写         从文件头读取,从文件尾写入       文件不存在进行创建,存在则追加

 

代码示例:

#include <stdio.h>

int main()
{
    FILE *p = fopen("/tmp/1.txt", "r");
    if(p == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    fclose(p);
    return 0;
}

 

二:文件关闭

//参数1:文件流

int fclose(FILE *fp);

 

三:文件写入

1、字符写入:fputc();

//参数1:写入的字符

//参数2:文件流

//作用:将单个字符写入到文件中

//返回值:成功时,返回写入字符的ascii码值,错误返回EOF(-1)

int fputc(int c, FILE *stream);

 

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("/opt/admin/tmp/1.txt", "w");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char name[] = "hello world!";
    int i;
    for(i = 0; i < strlen(name); i++)
    {
        fputc(name[i], file);
    }
    fputc('\n', file);
    fclose(file);
    return 0;
}

 

2、字符串写入:fputs();

//参数1:写入的字符串

//参数2:文件流

//作用:将字符串写入文件中

//返回值:返回一个非负值,如果发生错误则返回 EOF(-1)。

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

 

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("/opt/admin/tmp/1.txt", "w");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char name[] = "hello world!\n";
    fputs(name, file);
    fclose(file);
    return 0;
}

 

3、数据块写入:fwrite();

//参数1:要获取的数据的地址

//参数2:要写入内容的单字节数

//参数3:要写入size字节的数据项的个数

//参数4:目标文件指针

//返回值:返回实际写入的数据块的数目

//作用:向文件写入数据块,以二进制形式对文件进行操作,不局限于文本文件。

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

 

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("/opt/admin/tmp/1.txt", "wb+");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char name[] = "hello world!\n";
    fwrite(name, strlen(name), 1, file);
    fclose(file);
    return 0;
}

 

4、格式化写入:fprintf();

//参数1:目标文件指针

//参数2:指定的格式控制字符串

//参数3:各种输出项,与格式控制字符串中的字段一起写到文件中

//返回值:执行成功返回实际写入文件的字符个数;执行失败,返回负数

//作用:用来将输出项按指定的格式写入到指定的文本文件中。

int fprintf(FILE *stream, const char *format, …);

 

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("/opt/admin/tmp/1.txt", "wb+");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char name[] = "hello world!\n";
    fprintf(file, "this is %s\n", name);
    fclose(file);
    return 0;
}

四:文件读取

1、字符读取:fgetc()

//参数1:目标文件指针

//返回值:执行成功返回读取的字符,读取错误或者遇到结束标志EOF,返回EOF

//作用:从指定的文件中读取一个字符

int fgetc(FILE *stream);

 

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./1.txt", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char c;
    while((c = fgetc(file)) != EOF)
    {
        printf("%c", c);
    }
    fclose(file);
    return 0;
}

2、字符串读取:fgets()

//参数1:存储读取的数据

//参数2:存储数据的大小

//参数3:要读取的文件流

//返回值:成功则返回读取的buf,失败则返回NULL,这是,buf中的数据不确定

//作用:读取指定场长度的字符串存到字符数组中。每次只读取一行,每次最多读bufsize-1个字符(第bufsize个字符赋’\0’)

char *fgets(char *buf, int bufsize, FILE *stream);

 

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./1.txt", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char buf[1024] = {0};
    while(fgets(buf, 1024, file) != NULL)
    {
        printf("%s", buf);
    }
    fclose(file);
    return 0;
}

3、数据块读取:fread()

//参数1:存储读取的数据

//参数2:要读取的每个数据项的字节数

//参数3:要读取的数据项的个数

//参数4:读取的文件流

//返回值:返回真实读取的数据项count数,错误时返回0

//作用:一次读取文件中由若干个数据项组成的数据块,数据块的大小取决于数据项的大小和数据项的个数。

size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;

 

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./test", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char buf[102400] = {0};
    fread(buf, 1024, 100, file);
    printf("%s", buf);
    fclose(file);
    return 0;
}

 

4、格式化读取:fscanf()

//参数1:读取的文件流

//参数2:读取的字符格式

//参数3:读取的各个输入项

//返回值:成功则返回读入的参数个数,失败返回EOF

//作用:根据数据格式format从文件流中读取数据,遇到空格或换行结束。

int fscanf(FILE*stream,const char*format,[argument…]);

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./1.txt", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    char buf[1024] = {0};
    fscanf(file, "%s", buf);
    printf("%s\n", buf);
    fclose(file);
    return 0;
}

 

五:文件读写结合

1、fgetc()与fputc()结合使用

//以字符格式读取文件,再以字符格式写入文件,适用于文本文件

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./1.txt", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    FILE *fp = fopen("./2.txt", "w");
    char c;
    while( (c = fgetc(file)) != EOF )
    {
        fputc(c, fp);
    }
    fclose(file);
    fclose(fp);
    return 0;
}

 

2、fgets()与fputs()结合使用

//从文件中按行读取字符串,再以字符串写入文件,适用于文本文件,优点是按行读取很方便

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./1.txt", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    FILE *fp = fopen("./2.txt", "w");
    char buf[1024] = {0};
    while(fgets(buf, 1024, file) != NULL)
    {
        fputs(buf, fp);
    }
    fclose(file);
    fclose(fp);
    return 0;
}

 

3、fread()与fwrite()结合使用

//以数据块格式读取,再以数据块格式写入到文件中,可以读取二进制文件,优点是读取二进制文件使用

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./1.txt", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    FILE *fp = fopen("./2.txt", "w");
    char buf[1024] = {0};
    fread(buf, 1024, 1, file);
    fwrite(buf, strlen(buf), 1, fp);
    fclose(file);
    fclose(fp);
    return 0;
}

4、fprintf()与fscanf()结合使用

//以格式化的方式读取,遇到空格或换行就结束,再将读取的文件写入到文件中,优点是可以指定写入的文件格式

示例:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file = fopen("./1.txt", "r");
    if(file == NULL)
    {
        printf("open error!\n");
        return 0;
    }
    FILE *fp = fopen("./2.txt", "w");
    char buf[1024] = {0};
    fscanf(file, "%s", buf);
    fprintf(fp, "aaa:%s", buf);
    fclose(file);
    fclose(fp);
    return 0;
}

 

参考:

https://www.cnblogs.com/maluning/p/7955750.html

https://blog.csdn.net/songbook/article/details/79686322

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137060.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网页中使用opencv 人脸识别[通俗易懂]

    网页中使用opencv 人脸识别[通俗易懂]一.准备1.编译出opencv.js文件opencv.js没有现成的,需要编译,根据官网下载编译程序编译https://blog.csdn.net/zbl744949461/article/details/100150138如果不想自己编译,或者编译完的文件,在浏览器中有问题,可以直接从官网网站上自己下下来(F12,把js文件保存在本地)https:/…

    2022年5月26日
    36
  • 传奇ce刷元宝教程_ce修改器传奇刀速

    传奇ce刷元宝教程_ce修改器传奇刀速我們一把在打野怪的時候,多多少少都能夠在這個野怪的身上爆到許多的東西,其中有很小的幾率打到裝備,如果你爆到了裝備是一件非常幸運的事情呢,所以我們在玩传奇私服這款游戲的時候一定要多去野外刷怪。傳奇游戲其實本身就應該是一個獨來獨往的游戲,但是需要指出的是,在傳奇游戲當中真正獨來獨往的玩家其實并不多,除非說你的實力非常強大了。要不然的話,在傳奇游戲當中,如果是獨來獨往的話,那么想要做很多事情其實都是做不…

    2025年7月17日
    5
  • Postman安装与入门简单教程[通俗易懂]

    Postman安装与入门简单教程[通俗易懂]在测试技术中,接口测试是最基础、最重要,也是收益最高的测试技术,作为接口测试工具中的No.1,一起来看看Postman是怎么入门的吧。目录1.安装Postman2.注册Postman账号并登录3.创建Collections4.创建Request5.简单的Demo测试1.安装PostmanPostman下载地址:https://app.getpostman.com/app/download/win64点开后机会自动下载最新版的Postman,如果链接打不开或者很慢也可以上百度去下载,版本旧一点没关系,

    2026年1月16日
    5
  • 功能测试数据测试之因果图分析方法[通俗易懂]

    功能测试数据测试之因果图分析方法[通俗易懂]定义是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。因果图法产生的背景等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用

    2022年8月14日
    7
  • java字符串切分_Java字符串分割(转)[通俗易懂]

    java字符串切分_Java字符串分割(转)[通俗易懂]java.lang.String的split()方法,JDK1.4orlaterpublicString[]split(Stringregex,intlimit)示例代码publicclassStringSplit{publicstaticvoidmain(String[]args){StringsourceStr=”1,2,3,4,5″;String[]s…

    2022年6月21日
    31
  • pycharm整段代码缩进_eclipse整体向前缩进

    pycharm整段代码缩进_eclipse整体向前缩进整体缩进:鼠标拉选住代码块,按下tab键。反向缩进:鼠标拉选住代码块,按下shift+tab键值得注意的是反向缩进是按住shift,再按tab键。

    2022年8月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号