fopen()函数:

1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。

2.函数原型:

FILE * fopen(const char * path,const char * mode);
    -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt"
    -- mode: 文件打开方式,例如:
             "r" 以只读方式打开文件,该文件必须存在。
             "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
            "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
             "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
             "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)
            "wb" 只写打开或新建一个二进制文件,只允许写数据。
            "wb+" 读写打开或建立一个二进制文件,允许读和写。
             "ab" 追加打开一个二进制文件,并在文件末尾写数据。
             "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。
    --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。

fwrite()函数:

1.作用:在C语言中fwrite()函数常用语将一块内存区域中的数据写入到本地文本。

2.函数原型:

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
    -- buffer:指向数据块的指针
    -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
    -- count:数据个数
    -- stream:文件指针

注意:
返回值随着调用格式的不同而不同:

(1) 调用格式:fwrite(buf,sizeof(buf),1,fp);

成功写入返回值为1(即count)

(2)调用格式:fwrite(buf,1,sizeof(buf),fp);

成功写入则返回实际写入的数据个数(单位为Byte)

  1. 注意事项:

写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

示例说明:

代码1: 下面代码可将1024个字(int)写入到文本文件,fwrite的调用中,size是sizeof(int),count是DATA_SIZE

#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024

int main()
{
    unsigned int *dataPtr = NULL;
    dataPtr = (unsigned int *)malloc(sizeof(int)*DATA_SIZE);
    for(unsigned int i=0;i<DATA_SIZE;i++)
    {
        dataPtr[i] = i; //初始化缓存区
    }
    FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","w");
    fwrite(dataPtr,sizeof(int),DATA_SIZE,fp);
       fclose(fp);
       free(dataPtr);
    system("pause");
    return 0;
}

代码2:

下面代码也可将1024个字写到文本中,虽然fwrite函数中,size是1,但count是DATA_SIZE*sizeof(int)。与代码1实现的结果一样。

// datasave.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024

int main()
{
    unsigned int *dataPtr = NULL;
    dataPtr = (unsigned int *)malloc(sizeof(int)*DATA_SIZE);
    for(unsigned int i=0;i<DATA_SIZE;i++)
    {
        dataPtr[i] = i; //初始化缓存区
    }
    FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","ab+");
    fwrite(dataPtr,1,DATA_SIZE*sizeof(unsigned int),fp);
fclose(fp);
free(dataPtr);

system("pause");
return 0;

}
代码3:

下面的代码将4096个char数据写到文本,写入的数据中,最大值为255,与上面代码1、2有区别,因为缓存区数据类型不同

// datasave.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024

int main()
{
    unsigned char *dataPtr = NULL;
    dataPtr = (unsigned char *)malloc(sizeof(int)*DATA_SIZE); //申请的区域是4096个char,即1024个字的区域
    for(unsigned int i=0;i<DATA_SIZE;i++)
    {
        dataPtr[i] = i; //初始化缓存区
    }
    FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","ab+");
    fwrite(dataPtr,sizeof(char),DATA_SIZE*sizeof(int),fp);
    fclose(fp);
       free(dataPtr);
    system("pause");
    return 0;
}
代码4:

用malloc函数申请区域时是申请的一片char*区域,通过强制类型转换后可装unsigned int 数据。

// datasave.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024

int main()
{
    unsigned char *dataPtr = NULL;
    unsigned int *Ptr = NULL;
    dataPtr = (unsigned char *)malloc(sizeof(int)*DATA_SIZE);
    Ptr = (unsigned int *) dataPtr;
    for(unsigned int i=0;i<DATA_SIZE;i++)
    {
        Ptr[i] = i;
    }
    FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","ab+");
    fwrite(Ptr,sizeof(unsigned int),DATA_SIZE,fp);
    fclose(fp);
    free(dataPtr);
   system("pause");
    return 0;
}

fread()函数:

  1. 作用:从一个文件流中读取数据
  2. 函数原型如下:
    size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
      -- buffer:指向数据块的指针
      -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
      -- count:数据个数
      -- stream:文件指针

注意:返回值随着调用格式的不同而不同:

(1) 调用格式:fread(buf,sizeof(buf),1,fp);
读取成功时:当读取的数据量正好是sizeof(buf)个Byte时,返回值为1(即count)
                       否则返回值为0(读取数据量小于sizeof(buf))
(2)调用格式:fread(buf,1,sizeof(buf),fp);
读取成功返回值为实际读回的数据个数(单位为Byte)

代码参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *filp = NULL;
    char fileDir[] = "/home/yangzhiyuan/Documents/test.txt";
    char dataPtr[] = "Helloworld";
    printf("sizeof(dataPtr) = %ld\n",sizeof(dataPtr));
    filp = fopen(fileDir,"w+");  /* 可读可写,不存在则创建 */
    int writeCnt = fwrite(dataPtr,sizeof(dataPtr),1,filp);  /* 返回值为1 */
    //int writeCnt = fwrite(dataPtr,1,sizeof(dataPtr),filp);  /* 返回值为11 */
    printf("writeCnt = %d\n",writeCnt);
    fclose(filp);

    FILE *fp = NULL;
    fp = fopen(fileDir,"r");
    char buffer[256];
    int readCnt = fread(buffer,sizeof(buffer),1,fp);  /* 返回值为0 */
    //int readCnt = fread(buffer,1,sizeof(buffer),fp);  /* 返回值为11 */
    printf("readCnt = %d\n",readCnt);
    fclose(fp);

    printf("%s\n",buffer);
    exit(0);
}
注意:

本例代码中定义了两个FILE变量,一个用于write,一个用于read,写完后要close掉,然后再打开,然后读。如果直接使用一个FILE变量,会出错!

转自
https://blog.csdn.net/yang2011079080010/article/details/52528261

open()、fwrite()、fread()函数使用说明与示例的更多相关文章

  1. fopen()、fwrite()、fread()函数使用说明与示例

    fopen()函数: 1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针. 2.函数原型: FILE * fopen(const char * path,const  ...

  2. fopen\fread\fwrite\fseed函数的使用

    使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为: FILE *fopen(char *filename, char *mode); filename为文 ...

  3. fwrite和fread函数的用法小结(转)

    fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出. #include <stdio.h> size_t fread(void * ...

  4. strtok()函数、fseek()函数、fwrite()函数、fread()函数的使用

    在电子词典这个项目过程中遇到了几个主要的问题,第一个是怎么解决把翻译分开这个.第二个事情就是怎么把结构体写到文件中.这两个问题,一个是关于字符串的操作一个是关于文件的操作. strtok函数 char ...

  5. fopen,fwrite,fread使用

    fopen, fwrite, fread详解 1.头文件 #include <stdio.h> 2.fopen (1) 函数原型 FILE *fopen(char *filename, * ...

  6. C中fread()函数的返回值

    这个问题很容易搞错,并导致很多问题,需要强调的是fread函数返回的并不是字节数. realRead = fread(buf,item,count,fp)    (每次读item大小的数据块,分cou ...

  7. Replace 删除、替换函数精解示例

    '************************************************************************* '**模 块 名:Replace函数精解示例 '* ...

  8. Filter 数组过滤函数精解示例

    '************************************************************************* '**模 块 名:Filter 数组过滤函数精解示 ...

  9. Join函数 及Split函数精解示例

    '************************************************************************* '**模 块 名:Join函数 及Split函数精 ...

随机推荐

  1. centos 6.8 配置csh的shell和环境变量

    1.查看shell 查看系统中安装的所有版本的shell:cat   /etc/shells 查看当前用户使用的shell:echo $SHELL 2.修改用户shell 可以在/etc/passwd ...

  2. php中生成标准uuid(guid)的方法

    );// "}"        return $uuid;    }}echo guid();?>

  3. Lonsdor K518ISE free update news on what makes and year can work

    Lonsdor K518ISE engineers recently tested a number of cars and verified working great, below are tes ...

  4. 关于Eclipse新建Dynamic Web Projecj默认未创建web.xml的问题

    当使用eclipse新建Dynamic Web Projecj时,由于J2EE技术规范的更新,当使用Dynamic web module version默认版本为3.0时,将默认不会创建web.xml ...

  5. Java版 家政服务 社区服务 家装服务平台 源码 有案例 可定制

    产品说明: 家装服务平台.社区服务平台.服务类型的平台--公司成熟产品 包括工匠注册.资质认证.发布服务产品.会员注册.预约服务.工匠定价.执行服务.服务完毕填写工作日志上传现场照片.会员确认服务.返 ...

  6. Magnum Kubernetes源码分析(一)

    Magnum版本说明 本文以magnum的mitaka版本代码为基础进行分析. Magnum Kubernetes Magnum主要支持的概念有bay,baymodel,node,pod,rc,ser ...

  7. 简单的MVC与SQL Server Express LocalDB

    M模式: 类,表示数据的应用程序和使用验证逻辑以强制实施针对这些数据的业务规则. V视图: 应用程序使用动态生成 HTML 响应的模板文件. C控制器: 处理传入的浏览器请求的类中检索模型数据,然后指 ...

  8. 我为什么选择Go语言(Golang)

    作为一个以开发为生的程序员,在我心目中编程语言如同战士手里的武器,好与不好主要看使用的人是否趁手.是否适合,没有绝对的高低之分. 从2013年起,学习并使用Golang已经有4年时间了,我想叙述一下我 ...

  9. openwrt中在软件包中定义PKG_INSTALL将会发生什么?

    答: 将会使用默认软件包安装方式,相关代码如下 . 在include/package.mk中: Build/Install=$(if $(PKG_INSTALL),$(call Build/Insta ...

  10. linux内核中宏likely和unlikely到底做了些什么?

    1. 先看看它们长啥样吧!(它们有两种定义,第一种是使能了程序trace功能的宏定义,第二种是普通的宏定义,咱们分析普通宏定义吧) # define likely(x) __builtin_expec ...