c语言读写二进制文件

fread()(读)

#include 

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

功能:

以数据块的方式从文本中读取内容

参数:

ptr:存放读取出来的数据的内存空间

size:size_t为unsigned int 类型,此参数指定读取文件内容的块数据大小

nmemb:读取文件的块数,读取文件数据总大小为:size*nmemb

stream:已经打开的文件指针

返回值:

成功:实际成功读到的内容的块数,如果此值比nmemb小,但大于0,说明读到文件的结尾

失败:0

fwrite()(写)

#include 

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

功能:

以数据快的方式给文件写入内存

参数:

ptr:准备写入文件数据的地址

size:size_t为unsigned int 类型,此参数指定写入文件内容的块数据大小

nmemb:写入文件的块数,写入文件数据总大小为:size*nmemb

stream:已经打开的文件指针

返回值:

成功:实际成功写入文件数据的块数目,此值和nmemb相等

失败:0

二进制拷贝例:

int main(int argc,char* argv[])
{
	if (argc < 3)
		return -1;
	unsigned int start_time = time(NULL);
	
	FILE* f1=fopen(argv[1],"wb");
	FILE* f2 = fopen(argv[2], "rb");
	if (!f1||!f2)
		return -2;
	char ch[1024];
	while (!feof(f1))
	{
		memset(ch, 0, 1024);
		int len=fread(ch, 1, 1024, f1);
		fwrite(ch, len, 1, f2);
	}
	unsigned int end_time = time(NULL);
	printf("用时:%d(s)\n", end_time - start_time);

	return EXIT_SUCCESS;

}

stat()获取文件状态

#include

#include

int stat(const char*path,struct stat*buf);

功能:

获取文件状态信息

参数:

path:文件名

buf:保存文件信息的结构体

返回值:

成功:0

失败:-1

系统提供的stat结构体

struct stat

{

dev_t      st_dev;    //文件的设备编号

ino_t       st_ino;    //节点

mode_t    st_mode;//文件的类型和存取的权限

nlink_t     st_nlink;//连到该文件的硬连接数目,刚建立的文件值为1

uid_t        st_uid;//用户ID

gid_t         st_gid;//组ID

dev_t        st_rdev;//(设备类型)若此文件为设备文件,则为其设备编号

off_t             st_size   //文件字节数(文件大小)

unsigned long st _blksize;    //块大小(文件系统的I/O缓冲区大小)
unsigned long st _blocks;    //块数
time_t       st_atime;  //最后一次访问时间
time_t       st_mtime;  //最后一次修改时间
time_t       st_ctime;    //最后一次改变时间(指属性)
}

例:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include
#include
#include
#include
#include
#define MAX 1024*1024*10
int main(int argc,char* argv[])
{
	if (argc < 3)
		return -1;
	unsigned int start_time = time(NULL);
	struct stat s;
	stat(argv[1], &s);
	int len = s.st_size

fseek()文件的随机读写

#include 

int fseek(FILE*stream,long offset,int whence);

功能:

移动文件流(文件光标)的读写位置

参数:

stream:已经打开的文件指针

offset:根据whence来移动的位移数(偏移量),可以是正数,也可以是负数,如果正数,则相对于whence往右移动,如果是负数,则相对于whence往左移动,如果向前移动的字节数超过了文件开头则出错返回,如果向后移动的字节数超过了文件末尾,再次写入时将增大文件尺寸。

whence:取值如下:

SEEK_SET:从文件开头移动offset个字节

SEEK_CUR:从当前位置移动offset个字节

SEEK_END:从文件末尾移动offset个字节

返回值:

成功:0

失败:-1

ftell()(获取文件流位置)

#include

long ftell(FILE*stream);

功能:

获取文件流(文件光标)的读写位置

参数:

stream:已经打开的文件指针

返回值:

成功:当前文件流(文件光标)的读写位置

失败:-1

rewind()把文件流位置移动到文件开头

#include

void rewind(FILE*stream);

功能:

把文件流(文件光标)的读写位置移动到文件开头

参数:

stream:已经打开的文件指针

返回值:

无返回值

remove()(删除)

#include

int remove(const char*prthname);

功能:

删除文件

参数:

pathname:文件名

返回值:

成功:0

失败:-1

rename()(重命名)

#include 

int rename(const char* oldpath,const char*newpath);

功能:

把oldpath的文件名改为newpath

参数:

oldpath:旧文件名

newpath:新文件名

返回值:

成功:0

失败:-1

fflush()更新缓冲区

#include

int fflush(FILE*stream);

功能:

更新缓冲区,让缓冲区的数据立马写到文件中

参数:

stream:文件指针

返回值:

成功:0

失败:-1

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