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+,则从文件的末尾开始添加,文件长度加大。
示例一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <stdio.h>
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;
}
|
示例二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include<stdio.h>
#define SIZE 1
typedef
struct
{
char
name[10];
int
num;
int
age;
char
addr[15];
}student;
student stu[SIZE];
void
save()
{
FILE
*fp;
int
i;
if
((fp=
fopen
(
"dat.txt"
,
"w"
))==NULL)
{
printf
(
"无法打开此文件!\n"
);
return
;
}
for
(i=0;i<SIZE;i++)
if
(
fwrite
(&stu[i],
sizeof
(student), 1, fp) != 1)
printf
(
"文件写入错误。!\n"
);
fclose
(fp);
}
void
main()
{
int
i;
for
(i=0;i<SIZE;i++)
scanf
(
"%s%d%d%s"
,&stu[i].name,&stu[i].num,&stu[i].age,&stu[i].addr);
save();
}
|
示例三:
1
2
3
4
5
6
7
8
9
10
11
|
/* fwrite example : write buffer */
#include <stdio.h>
int
main ()
{
FILE
* pFile;
char
buffer[] = {
'x'
,
'y'
,
'z'
};
pFile =
fopen
(
"myfile.bin"
,
"wb"
);
fwrite
(buffer ,
sizeof
(buffer), 1 , pFile );
fclose
(pFile);
return
0;
}
|
称为myfile.bin的一个文件被创建并存储到它的缓冲区的内容。为了简单起见,该缓冲区包含Char元素,但它可以包含任何其他类型。.
sizeof(buffer)
字节数组的长度(在这种情况下,它是三个,因为数组有三个元素,每次一个字节)。
示例四:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//程序示例 fwrite fread fseek
#include <stdio.h>
int
main ()
{
FILE
*fp;
char
msg[] =
"file content"
;
char
buf[20];
fp =
fopen
(
"d:\\a\\a.txt"
,
"w+"
);
if
(NULL == fp)
{
printf
(
"The file doesn't exist!\n"
);
return
-1;
}
fwrite
(msg,
strlen
(msg),1,fp);
//把字符串内容写入到文件
fseek
(fp,0,SEEK_SET);
//定位文件指针到文件开始位置
fread
(buf,
strlen
(msg),1,fp);
//把文件内容读入到缓存
buf[
strlen
(msg)] =
'\0'
;
//删除缓存内多余的空间
printf
(
"buf = %s\n"
,buf);
printf
(
"strlen(buf) = %d\n"
,
strlen
(buf));
return
0;
}
|