C++ 读写文件的简单封装

来源:互联网 发布:wind数据付费版多少钱 编辑:程序博客网 时间:2024/05/16 11:45

原创文章,不得转载!


说道文件读写,有很多方法,MFC封装的有,C++的流文件读写,但是这里说的其实是C语音对文件的读写封装,fopen,fwrite,fread,fclose;

这几个函数很简单,同时也很强大,速度很快;一般建议用这类方法读写文件;


1:一般,如果想直接写文件,例子:

FILE * f = fopen(pstr,"w+b"); 

fwrite( Buf, 1, nLen, f ); 

fclose(f);


这个方式是将一定内容写到文件中,但是如果文件存在会删除文件重新写pBuf到新得文件;



2:如果想追加写文件,一般的方法是:

FILE * f = fopen(pstr,"a+b"); 

fwrite(  Buf, 1, nLen, f ); 

fclose(f);


这样,如果文件存在,会将Buf写到文件的后面,不会销毁文件;


3:在一般程序调试的时候,我们在写文件,希望在程序的运行过程中文件一直追加写,当程序再次运行的时候重新写新的文件追加写;

例如,写一个录音程序,启动程序,追加方法写录音;关闭程序;再次打开程序删除上次写的音频文件重新写追加文件录音;


一般的的解决方法是:

用方法2,追加写文件,程序运行关闭后,再次启动程序前,删除上次的文件,否则这次的内容会继续添加到上次的文件后面;


推荐解决方法:

fopen 的 “w+b”,方法, 当不关闭文件指针(fclose(f);)一直用fwrite,可以将文件一直写到文件后面,当重新fopen,a+b的时候文件重新建立;


所以可以将 文件指针“f”设置问全局变量,或者成员变量,但是这样就有些麻烦而且;


所以程序可以写成;

{

static FILE * f = fopen(pstr,"w+b");

 fwrite(  Buf, 1, nLen, f ); 

}

这样,在程序重新启动之前 文件指针一直保存,所以可以一直追加写文件,当程序重新启动执行到这里的时候,又会删除上次文件重新写追加文件;


这样写,还是有点麻烦,因为每次都要写相同的代码,但是,目的就是将一定长处的内容写到文件中,所以在简化上述代码:


#define DebugWriteFile( pstr, Buf, nLen ) { static FILE * f = fopen(pstr,"w+b"); fwrite( Buf, 1, nLen, f ); }


void CDlg::OnBnClickedButton()
{

char ch1[10] = "12345 ";
DebugWriteFile("DebugWriteFile1.dat", ch1, 10 );


char ch2[10] = "67890 ";
DebugWriteFile("DebugWriteFile2.dat", ch2, 10 );

}

1 0