• c语言文件读写操作


    c语言读写文件操作函数位于stdio.h头文件

    读文件:fgetc(按字符)、fgets(按字符串)、fread(按数据块)、fscanf(按指定格式化);

    写文件:fputc(按字符)、fputs(按字符串)、fwrite(按数据块)、fprintf(按指定格式化);

    主要涉及操作函数:fopen、fclose;

    fopen:

    解释:

    函数原型:FILE * __cdecl fopen(_In_z_ const char * _Filename, _In_z_ const char * _Mode);

    说明:

    参数:_Filename--文件路径、_Mode--文件操作模式(读,写,追加)

    返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中;

    (更详细的资料请移步:http://baike.baidu.com/view/656681.htm


    fgetc:

    解释:意为从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节;

    函数原型:int __cdecl fgetc(_Inout_ FILE * _File);

    说明:

    参数:_File--指向FILE类型的指针

    返回值:返回所读取的一个字节,如果读到文件末尾或者读取出错时返回EOF;

    例程:

    void readc()
    {
        FILE *pf = fopen("c:\\1.txt","r");
        int i;
        do
        {
            i = fgetc(pf);
            printf("%c", i);
        }while(i != EOF);
        fclose(pf);
    }


    fputc:

    解释:将字符ch写到文件指针fp所指向的文件的当前写指针的位置;

    函数原型:int fputc (char c, File *fp);

    说明:

    参数:c--当前要写入文件的字符、fp--指向FILE类型的指针;

    返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。

    例程:

    void writec()
    {
        FILE *fp = fopen("c:\\1.txt","a");
        fputc('s',fp);
        fputc('h',fp);
        fputc('i',fp);
        fputc('z',fp);
        fputc('f',fp);
        fclose(fp);
    }


    fgets:

    解释:将字符ch写到文件指针fp所指向的文件的当前写指针的位置;

    函数原型:char * __cdecl fgets(_Out_writes_z_(_MaxCount) char * _Buf, _In_ int _MaxCount, _Inout_ FILE * _File);

    说明:

    参数:Buf--字符串缓存区、_MaxCount--字符串缓存区长度、_File--文件指针;

    返回值:

    1. 成功,则返回第一个参数buf;

    2. 在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;

    3. 如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。

    例程:

    void readStr()
    {
        FILE *pf = fopen("c:\\str.txt","r");
        char temp[10];
        while(fgets(temp,sizeof(temp)/sizeof(char),pf)!=NULL)
            printf("%s",temp);
        fclose(pf);
    }


    fputs:

    解释:将字符串写入文件

    函数原型:int __cdecl fputs(_In_z_ const char * _Str, _Inout_ FILE * _File);

    说明:

    参数:_Str--待写入的字符串、_File--文件指针;

    返回值:

    成功:为非负整数;否则返回EOF;

    例程:

    void writeStr()
    {
        FILE *pf = fopen("c:\\str.txt","w");
        fputs("this is my first program of write string into file",pf);
        fclose(pf);
    }


    fread:

    解释:按数据块从文件中读取数据

    函数原型:size_t __cdecl fread(_Out_writes_bytes_(_ElementSize*_Count) void * _DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE * _File);

    说明:

    参数_DstBuf--待存储的数据块集合(数组等)、_ElementSize--单个数据块的大小、_Count--本次读取的数据块数量、_File--文件指针;

    返回值:

    实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。

    例程:

    #define READ_ARR_COUNT 3

    struct ReadStudent
    {
        char name[20];
        int age;
        char sex;
        char addr[100];
    }stuR[READ_ARR_COUNT];

    void readStream()
    {
        FILE *pf = fopen("c:\\stream.txt", "r");//读出二进制文件
        size_t count = fread(stuR,sizeof(struct ReadStudent),3,pf);
        int i;
        for (i = 0; i < READ_ARR_COUNT; i++)
        {
            printf("name:%s,age:%d,sex:%c,addr:%s\n",stuR[i].name, stuR[i].age,stuR[i].sex,stuR[i].addr);
        }
        fclose(pf);
        system("pause");
    }


    fwrite:

    解释:将数据块写入到文件中

    函数原型:size_t __cdecl fwrite(_In_reads_bytes_(_Size*_Count) const void * _Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE * _File);

    说明:

    参数_DstBuf--待写入文件的数据块集合(数组等)、_Size--单个数据块的大小、_Count--本次写入的数据块数量、_File--文件指针;

    返回值:

    实际写入文件的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。

    例程:



    总结:

        对文件的操作各函数的返回值始终记不住,所以作一下表格以供记忆,各位如果有好的记忆方法,可以交流交流;

    函数名 返回值类型 异常值 返回值描述
    fgetc int EOF 返回所读取的一个字节,如果读到文件末尾或者读取出错时返回EOF;
    fputc int EOF 返回写入文件的字符的ASCII码值;
    出错时,返回EOF;
    fgets char * NULL 成功,则返回第一个参数buf;
    如果还没读入任何字符或出错返回NULL;
    fputs int EOF 成功:为非负整数;否则返回EOF
    fread size_t   实际读取的元素个数。如果返回值与读取数量不相同,则可能文件结尾或发生错误。
    fwrite size_t   实际写入的元素个数。
    fscanf      
    fprintf      
    我们要走的路,有着太多的不确定,他人的一句劝诫,自己的一个闪念,偶尔的得与失,都时刻在改变着我们命运的走向。世事难以预料,遇事无须太执,谁都无法带走什么,又何必纠结于某一人、某一时、某一事。只有看开了,想通了,才能随缘、随性、随心而为,不急不躁,不悲不欢,不咸不淡。
  • 相关阅读:
    谁是你随时可以说话的人
    我们在帝都这么拼,为的是什么?
    CVE-2016-4758: UXSS in Safari's showModalDialog
    JSON-SCHEMA
    JS城市data
    linux(centos )mongodb install
    python pip install
    基于chrome内核的UXSS
    Trying to hack Redis via HTTP requests
    Apache Solr 访问权限控制
  • 原文地址:https://www.cnblogs.com/szfBlogs/p/4890285.html
Copyright © 2020-2023  润新知