1.从资源管理器中选择指定类型的文件
//eg:
CString strMapPath;
CString strMapName;
CFileDialog dlg(
TRUE, //如果为TRUE, 则创建文件打开对话框;
//如果为FALSE,则构造一个File Save As(另存为)对话框
_T("map"), //缺省文件扩展名,如果用户在文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。
//如果为NULL,则不添加扩展名。
NULL, //初始显示于文件名编辑框中的文件名,如果为NULL,则不显示初始文件名。
OFN_EXPLORER | OFN_FORCESHOWHIDDEN | OFN_FILEMUSTEXIST,
//定制对话框
//OFN_EXPLORER:使用资源管理器界面 OFN_FORCESHOWHIDDEN:强制显示隐藏项目
//OFN_FILEMUSTEXIST:用户在编辑框中输入的文件名对应的文件必须存在,否则会弹出提示框,
//这样在IDOK后就不用再检查文件有效性了
_T("map Files(*.map)|*.map||"
//指定可以应用到文件的过滤器,|前为提示信息,|后为文件格式,最后以||结尾
));
if (dlg.DoModal() == IDOK)
{
map_file_info.strMapFilePath = dlg.GetPathName();
map_file_info.strMapFileName = dlg.GetFileName();
//MessageBox(_T("文件已加载"));
}
2.文件读
CFile类及其派生类的使用
2.1 打开文件
BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
参数: lpszFileName 待打开文件的路径,路径可为绝对、相对或网络名(UNC)。
nOpenFlags 一个定义了文件的共享和访问模式的UINT。它指定了打开文件后的动作,
可以用OR(|)操作符将选项组合起来,至少应有一个访问权限和一个共享选项,
modeCreate和modeNoInherit模式是可选的。可参阅CFile 构造函数中模式选项的列表。
pError 指向一个存在的文件异常对象,获取失败操作的状态。
eg:
CStdioFile file;
CFileException e;
if (!file.Open(map_file_info.strMapFilePath, CFile::modeRead, &e))
{
MessageBox(_T("文件打开失败!"));
#ifdef _DEBUG
afxDump << "File could not be opened" << e.m_cause << "\n";
#endif
return;
}
2.2从文件中读取、写入数据
使用CStdioFile类,以文本方式(缺省)打开文件
2.2.1 读取文本
CStdioFile::ReadString
//原型:
BOOL ReadString(CString& rString);
参数: lpsz 指定一个指向用户提供的缓冲区的指针;该缓冲区将接收一个以空字符结尾的文本字符串。
返回值:
返回一个指向包含文本数据的缓存的指针。如果在到达文件结尾后没有读到任何数据,则返回布尔值FALSE。
注意:这个函数的CString版本将“/n”删除(如果有的话);
2.2.2 写入文本
CStdioFile::WriteString
//原型
virtual void WriteString( LPCTSTR lpsz );
参数: lpsz 指定一个指向存放了以空字符结尾的文本字符串的缓冲区的指针
说明:
此成员函数将一个缓冲区中的数据写入与CStdioFile对象关联的文件中。
结束的空字符(“\0”)不被写入该文件。
lpsz中的所有换行符都被以一个硬回车—换行符对写入该文件。