//读文件数据
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();
}