天天看点

fstream中字符流方式替换MFC中CFile文件读写

在看算法时,提供了一部分使用MFC编写的代码,为将其便于处理,我使用非MFC代码来替换处理。

1.CFILE类是MFC的文件基类,他直接提供无缓冲的二进制磁盘I/O操作。

1)打开/创建文件

open函数原型如下:

BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pException)
           

//pszFileName是文件名,可包含文件路径,若只有文件名,则默认路径为工程路径,nOpenFlags是文件打开模式,pError是打开失败时用来接收失败信息,一般设置为NULL。其中各参数的设置,可查阅https://blog.csdn.net/zhang_fei_fresh/article/details/76408636

2)Read函数原型如下:

UINT Read (void* lpBuf,UINT nCount); 
           

lpBuf是从文件中读取到的数据的内存Buf指针,nCount是从文件读取的字节数

原MFC编写代码文件如下:

CFile imageFile;
CString sFName="打开的路径";
imageFile.Open(sFName, CFile::modeReadWrite, &fileException);
long pageHei;
imageFile.Read(&pageHei, 4);
           

 现在目标将以上代码转换为fstream输入输出流。

打开文件ifstream::open

void open (const   char* filename,  ios_base::openmode mode = ios_base::in);
void open (const string& filename,  ios_base::openmode mode = ios_base::in);
           

filename 要打开文件的文件名,mode 打开文件的方式,具体的参数设置可以参考

https://blog.csdn.net/sinat_36219858/article/details/80369255

由于CFile提供的是二进制磁盘I/O操作,因此打开文件的方式应选择ios::binary

ifstream imageFile;
string SFName="打开的路径";
imageFile.open(SFName, ios::in | ios::binary);
long pageHei;
imageFile.read((char*)(&pageHei), 4);
           

函数原型 istream& read (char* s, streamsize n); //用来暂存内容的数组(必须是char*型),以及流的长度

同理,write操作也可类似转换。

文中若有错误以及不妥的地方,还望指出,以便共同学习。

继续阅读