MFC/C++学习系列之简单记录12——文件操作
- 前言
- 文件操作处理
- 具体使用
-
- CFileDialog类
- CFile类和CStdioFile类
- 错误
- 总结
前言
学习MFC的文件处理操作!
文件操作处理
- CFileDialog类:对话框类,获取选择的文件信息。
- CFile类:抽象类,对文件的直接打开、关闭、读取、写入操作。
- CStdioFile类:CFile的派生类,标准格式化文本输入输出。
具体使用
CFileDialog类
定义两个按钮,打开文件和保存文件。来使用一下CFileDialog!
在添加按钮后,要记得添加变量!
CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL,
DWORD dwSize = 0,
BOOL bVistaStyle = TRUE);
- BOOL bOpenFileDialog:
TRUE:创建一个打开文件的对话框。
FALSE:创建一个保存文件的对话框。 - LPCTSTR lpszDefExt = NULL:默认文件扩展名。
- LPCTSTR lpszFileName = NULL:初始文件名,显示在对话框中的文件名输入框的初始值。
- DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT:对话框的行为标志。常用的标志包括:
OFN_HIDEREADONLY:隐藏“只读”复选框。
OFN_OVERWRITEPROMPT:如果选择的文件已存在,提示用户是否覆盖。
OFN_PATHMUSTEXIST:确保路径存在。
OFN_FILEMUSTEXIST:确保文件存在。
OFN_ALLOWMULTISELECT:允许选择多个文件。 - LPCTSTR lpszFilter = NULL:文件类型过滤器。定义用户可以选择的文件类型。格式为:“Text Files (.txt)|.txt|All Files (.)|.||”。
- CWnd pParentWnd* = NULL:父窗口指针。对话框将作为这个窗口的子窗口显示。
- DWORD dwSize = 0:保留参数,用于确保与16位版本的兼容性。通常设置为0。
- BOOL bVistaStyle = TRUE:是否使用Vista风格的对话框。如果设置为TRUE,将使用Vista风格的对话框;如果设置为FALSE,将使用旧风格的对话框。
举例:
//打开文件
CFileDialog fileDlg(TRUE, // TRUE for file open, FALSE for file save
_T("txt"), // Default file extension
NULL, // No initial file name
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, // Options
_T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), // File types filter
this); // Parent window
//保存文件
CFileDialog fileDlg(FALSE, // FALSE for file save
_T("txt"), // Default file extension
_T("MyDocument.txt"), // Initial file name
OFN_OVERWRITEPROMPT, // Options
_T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), // File types filter
this); // Parent window
//简单使用
CFileDialog fileDlg(TRUE);
CFileDialog fileDlg(FALSE);
以上是简单的打开对话框,打开对话框后,可以继续使用该类完成一些需求,在这里需要搭配DoModal 方法来显示对话框。
- GetPathName():获取完整的文件路径。
- GetFileName():获取文件名。
- GetFileTitle():获取不包含路径的文件名。
- GetFileExt():获取文件扩展名。
- GetNextPathName():获取下一个选择的文件路径(用于多选)。
if(fileDlg.DoModal() == IDOK)
{
CStringArray FilesName;
fileDlg.GetFileName(FilesName);
}
else
{
}
CFile类和CStdioFile类
- open:打开文件
- ReadString:读取数据
- Close:关闭文件
- WriteString:写入文件
- Flush:确保内容全部写入
CFile file;
CFileException exception;
file.Open(_T("xxx.txt"),
CFile::modeRead | CFile::typeBinary, &exception);
CStdioFile file1;
CFileException exception;
file1.Open(_T("xxx.txt"), CFile::modeRead, &exception);
从上述代码看,两者使用差不多。再看源码:class CStdioFile : public CFile。说明CStdioFile就是CFile的派生类。使用方式类似。
错误
0x75D70EE2 (KernelBase.dll)处(位于 MFCApplication1.exe 中)引发的异常: 0x000006BA: RPC 服务器不可用。
shell\comdlg32\fileopensave.cpp(9121)\comdlg32.dll!7687D1E0: (caller: 76856571) ReturnHr(1) tid(566c) 8007000E 内存资源不足,无法完成此操作。
在使用文件对话框时,没有对话框弹出。
这里是因为在之前项目中设置了堆栈的大小,设置过大,导致无法弹窗。修改堆栈大小,改小,文件弹窗。
总结
本文主要介绍了关于文件类的操作!