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]