C 读写文件内容

该文介绍了C语言中使用fopen进行文件读写的相关函数,包括不同模式如r,rb,w,wb等的含义,并展示了如何获取和设置文件数据。同时,也展示了C++MFC库中的CStdioFile类在文件操作中的用法,包括文件的创建、写入、读取和关闭。
char* get_file_data(const char *file_name,long *len)
{
	*len = 0;
	char *buffer_out = NULL;
	FILE *fp = fopen(file_name,"rb");//注意r和rb的区别
	if(fp==NULL)
	{
		buffer_out = NULL;
		return NULL;
	}
	fseek(fp, 0, SEEK_END);	//定位到文件尾,偏移量为0
	*len = ftell(fp);	//返回当前定位的文件位置(也就是文件总长度)
	if(*len<=0)
	{
		fclose(fp);
		return NULL;
	}
	buffer_out = (char*)malloc(*len);
	printf("buffer_out, addr=%p.\n",buffer_out);
	
	fseek(fp, 0, SEEK_SET);
	fread(buffer_out,1,*len,fp);
    fclose(fp);
	
	#if 1
	printf("FILE_DATA(%ld):\n",*len);
	for(int i=0;i<*len;i++)
	{ //可用UltraEdit做数据对比
		printf("%02x ",(uint8_t)buffer_out[i]);
		if(i%16==15)
			printf("\n");
		if(i>16*10)
		{
			printf("......%02x",(uint8_t) buffer_out[*len-1]);
			break;
		}
	}
	printf("\n");
	#endif

	return buffer_out; //NOTE: Free() after use!
	
}

void set_file_data(const char *file_name,char* buff,long *len)
{
	
	FILE *fp = fopen(file_name,"rb+");
	//w+打开并清空文件
	//r+打开不清空文件
	if(fp==NULL)
	{
		*len = 0;
		return ;
	}
	
	fseek(fp, 0, SEEK_SET);
	*len = fwrite(buff,1,*len,fp);	
    fclose(fp);
	
	return ;
}
 CStdioFile类 代码如下:

//======创建文件,写入=======
CStdioFile file;
file.Open("ts.txt",CFile::modeCreate|CFile::modeWrite);
//写入文件
CString str;
str.Format("%s\r\n","hello! I am talkingmute!");
file.Seek(0, CFile::end);
file.WriteString( str );
//关闭文件
file.Close();

//=========打开文件,读取======
CString strText = “”;
CString szLine = “”;
//打开文件
CStdioFile file;
file.Open("ts.txt",CFile::modeRead);
//逐行读取字符串
while( file.ReadString( szLine ) )
{
   strText += szLine;
}
MessageBox(strText);
//关闭文件
file.Close();
fopen模式参数说明:
  参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
  r 以只读方式打开文件,该文件必须存在。
  r+ 以可读写方式打开文件,该文件必须存在。
  rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。

       rb :读方式打开一个二进制文件,不允许写数据,文件必须存在
  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
  wb 只写打开或新建一个二进制文件;只允许写数据。
  wb+ 读写打开或建立一个二进制文件,允许读和写。
  ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
  wx 创建文本文件,只允许写入数据。[C11]
  wbx 创建一个二进制文件,只允许写入数据。[C11]
  w+x 创建一个文本文件,允许读写。[C11]
  wb+x 创建一个二进制文件,允许读写。[C11]
  w+bx 和“wb+x”相同[C11]
  以x结尾的模式为独占模式,文件已存在或者无法创建(一般是路径不正确)都会导致fopen失败。文件以操作系统支持的独占模式打开。[C11]

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值