1.首先我们要使用到的是CStdioFile类,它可以建立一个CStdioFile 对象,代表一个用运行时函数fopen 打开的C 运行时流式文件。也就可以打开一个缓存的文件用于写入。
2.CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。用于打开对话框进行保存的。接下来直接上代码,新建一个MFC基于对话框的工程,然后添加一个按钮,双击进行消息响应函数的添加,代码如下:
void CDocSaveDlg::OnBnClickedSave()
{
// TODO: 在此添加控件通知处理程序代码
CStdioFile file; //继承于CFile类
BOOL isOpen = FALSE; //是否打开保存(FALSE为保存)
CString defaultDir = L""; //默认打开路径
CString fileName = L""; //默认打开的文件名
CString filter = L"文件 (*.txt)|*.txt||";//文件过滤的类型
CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter, NULL);
INT_PTR result = openFileDlg.DoModal();//模态对话框跳出
CString filePath = defaultDir + "\\" + fileName;
CString str;
int *p = (int*)malloc(100*sizeof(int));//写入的内存大写
for (int i = 0; i < 100; i++)
{
p[i] = i;
}
if (result == IDOK)
{
filePath = openFileDlg.GetPathName();//得到文件的绝对路径
file.Open(filePath, CFile::modeCreate | CFile::modeWrite);
for (int i = 0; i < 100; i++)
{
str.Format(_T("%d "), p[i]);
file.WriteString(str);
if (i % 4 == 0)
{
file.WriteString(L"\n");
}
}
file.Flush();
file.Close();
}
CWnd::SetDlgItemTextW(IDC_SavePath, filePath);
free(p);
}
3.在调试的过程中,遇到一个异常如下图所示,是因为malloc是在堆区分配内存,错误的原因是直接写成了malloc(100)这样是错误的,是100*sizeof(int)这么大的内存。