//读文件数据 void CFileOperDlg::OnButtonRead() { // TODO: Add your control notification handler code here CFile file; CString FileName="data.txt"; char buf[1000];//读1K memset(buf,0,1000);//初始化内存,防止读出字符末尾出现乱码 try { if(!file.Open(FileName,CFile::modeRead)) { MessageBox("没有文件!"); return; } file.Read(buf,sizeof(buf)); file.Close(); m_data=buf;//给文本框赋值CString m_data UpdateData(false);//在文本框显示 MessageBox("读出成功!"); } catch(CFileException *e) { CString str; str.Format("读取数据失败的原因是:%d",e->m_cause); MessageBox("str"); file.Abort(); e->Delete(); } } //写文件数据 void CFileOperDlg::OnButtonWrite() { // TODO: Add your control notification handler code here UpdateData();//取文本框字符 CFile file; CString FileName="data.txt"; try { file.Open(FileName,CFile::modeCreate|CFile::modeWrite); file.SeekToBegin(); file.Write((unsigned char *)(m_data.GetBuffer(0)),m_data.GetLength());//CString m_data file.Flush(); file.Close(); MessageBox("写入成功!"); } catch(CFileException *e) { CString str; str.Format("写入失败的原因是:%d",e->m_cause); MessageBox("str"); file.Abort(); e->Delete(); } }
很简单,无须解释~
如果要追加,那么请添加 file.SeekToEnd(); 之后再写入
如果要覆盖,那么请添加 CFile::modeCreate
CStdioFile 继承于 CFile,可以用其实现读取写入一行的操作:
CStdioFile mFile; if (mFile.Open("d:\\test.txt",CFile::modeReadWrite)) { CString strData = ""; mFile.ReadString(strData); mFile.Close(); }
打开文件对话框
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_READONLY, _T("MP3 Files (*.mp3)|*.mp3||"), this); if (dlg.DoModal() == IDOK) { CString tmp = dlg.GetFileName(); // …… }
保存文件对话框
CFileDialog dlg( FALSE, // 不是打开文件,FALSE 是保存 _T("sln"), // 默认文件名后面,自动填充的文件拓展名,删除后保存则不会追加 _T("HelloWorld"), // 默认的文件名,可以是 NONAME OFN_CREATEPROMPT | OFN_PATHMUSTEXIST, // 总是创建并且路径必须事先存在 _T("解决方案文件 (*.sln)|*.sln||"), // 默认创建的文件类型,只要不是 *.*,那么拓展名会被自动追加 this); // 模式对话框的父窗口句柄 if (dlg.DoModal() == IDOK) { CString tmp = dlg.GetFileExt(); tmp = dlg.GetFileName(); tmp = dlg.GetFileTitle(); tmp = dlg.GetFolderPath(); tmp = dlg.GetPathName(); }