分享

CFile::Open()和CFile::Read()

 susongdada 2013-05-18

CFile::Open

在MFC里面,打开一个文件最常用的方法分为以下两步:
1.创建一个用于打开文件的对象,通常都是声明一个CFile或者一个CFile派生类的对象。
2.调用该CFile对象的Open方法,并提供一个文件路径和打开方式作为Open方法的参数。
Open函数的原型如下:
virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );
如果你想读一个文件,就用CFile::modeRead作为第二个参数,同时CFile::modeCreate代表创建一个文件。
参数二:nOpenFlags可组合为以下值:
CFile::modeCreate 创建一个新的文件,如果文件存在将文件截取成长度为0。 ·
CFile::modeNoTruncate 此标志总是与modeCreate 配合使用,如果文件存在,不将文件截取成长度为0;如果文件不存在即创建新文件。这个功能往往很好用,比如说,当你需要打开一个设置文件,但是你并不清楚这个文件是否已经存在。 
CFile::modeRead 只读方式打开。 
·CFile::modeReadWrite 读写方式打开。. ·
CFile::modeWrite 只写方式打开。 ·
CFile::modeNoInherit 阻止这个文件被子进程继承。 ·
CFile::shareDenyNone 打开这个文件同时允许其它进程读写这个文件。如果文件被其它进程以兼容的模式打开,这时create操作会失败。 ·
CFile::shareDenyRead 打开文件拒绝其它任何进程读这个文件。如果文件被其它进程用compatibility模式或者是读方式打开,create操作失败。. ·
CFile::shareDenyWrite 打开文件拒绝其它任何进程写这个文件。如果文件被其它进程用compatibility模式或者是写方式打开,create操作失败。 ·
CFile::shareExclusive 以独占方式打开这个文件,不允许其它进程读写这个文件。如果文件已经在其它程序或当前程序以其他方式打开来进行读写,将返回失败。 ·
CFile::shareCompat 这个标志在32位的MFC中无效。 ·
CFile::typeText 设置成对回车换行对有特殊处理的文本模式(仅用在派生类中)。 ·
CFile::typeBinary 设置二进制模式(仅用在派生类中) 。
参照下面的例子:
VC++:
TCHAR* pszFileName = _T("c:\\test\\myfile.dat");
CFile myFile;
CFileException fileException;
if ( !myFile.Open( pszFileName, CFile::modeCreate | CFile::modeReadWrite, &fileException ) )
{
TRACE( _T("Can't open file %s, error = %u\n"),
pszFileName, fileException.m_cause );
}
大家常用的从文件中读写字符串的类CStdioFile就是从CFile派生出的,因此CStdioFile类的对象也可以直接调用Open方法来打开一个对象,参看以下例子:
CString csExt;
CStdioFile Rfile(_T("C:\\myfiles\\myfile1.txt"),CFile::modeRead); //定义并初始化一个CStdioFile类的对Rfile
//一行一行的读入字符串
while(Rfile.ReadString(csExt))
{
TRACE(_T("%s\n"),csExt);
}
Rfile.Close();

CFile::Open成功打开文件后,使用 GetLength 获取文件的长度,nFileLen;
然后 new 一块内存。char*lpBuf = new char[nFileLen];
再使用 Read( lpBuf, nFileLen);
文件的数据就装入到 lpBuf指向的内存块了。
Read是从当前游标开始读取,默认是文件起始,可以使用 Seek/ SeekToBegin / SeekToEnd 来定位。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多