fopen及fwrite函数详解

1、fopen函数原型

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

2、参数

  • filename-- 这是 C 字符串,包含了要打开的文件名称。

  • mode-- 这是 C 字符串,包含了文件访问模式。

3、功能

使用给定的模式mode打开filename所指向的文件。

4、返回值

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

一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在 fopen() 后作错误判断及处理。 [1] 

5、参数说明

参数mode字符串包含了文件访问模式,欲打开的文件路径及文件名,参数 mode 字符串则代表着流形态。

mode 有下列几种形态字符串:

fopen及fwrite函数详解_第1张图片

#include 
#define F_PATH "d:\\myfile\\file.dat"
 
int main(void)
{
    FILE *fp = NULL; /* 需要注意 */
    fp = fopen(F_PATH, "r");
    if (NULL == fp)
    {
        return -1; /* 要返回错误代码 */
    }
    fclose(fp);
    fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */
    return 0;
}

1、fwrite函数原型:

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

2、参数

  • ptr-- 这是指向要被写入的元素数组的指针。

  • size-- 这是要被写入的每个元素的大小,以字节为单位。

  • nmemb-- 这是元素的个数,每个元素的大小为 size 字节。

  • stream-- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

3、功能

ptr所指向的数组中的数据写入到给定流stream中。

4、返回值

    如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

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

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

(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;

(2)size:要写入内容的单字节数;

(3)count:要进行写入size字节的数据项的个数;

(4)stream:目标文件指针;

(5)返回实际写入的数据项个数count。

       说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。

       fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步

#include 
struct mystruct
{
    int i;
    char cha;
};
 
int main(void)
{
    FILE *stream;
    struct mystruct s;
    if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
    {
        fprintf(stderr, "Cannot open output file.\n");
        return 1;
    }
    s.i = 0;
    s.cha = 'A';
    fwrite(&s, sizeof(s), 1, stream); /* 写的struct文件*/
    fclose(stream); /*关闭文件*/
    return 0;
}

 

你可能感兴趣的:(C++)