关于文件的写入与读出!请大家帮忙!

mibo2 2003-10-09 11:01:32
我建立了一个MFC AppWizard(EXE),然后选择Dialog based,然后Finish。我在界面上只留下了两个Button按钮和一个文本输入框。我想实现的功能是:点击一个Button,出现文件保存对话框,选择文件的名称和保存的位置,将文本输入框中的内容保存到指定文件中去;点击另外一个Button,实现打开选定的文件。

对于VC,本人实在是不会。希望大家帮帮忙,给出代码。谢谢!!
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lshadow 2003-10-09
  • 打赏
  • 举报
回复
楼上的说的很清楚了,来晚了:)
alon21 2003-10-09
  • 打赏
  • 举报
回复
//CFileDialog的使用
//Alon
例:
先在使用文件对话框的类的类定义文件中加入对象定义CFileDialog m_MyOpenDialog(TRUE,"avi","*.avi");

随后,在需要使用该对话框的地方加入以下语句:
m_MyOpenDialog.Domodal();
就可以预览所有.avi文件.


其调用规则为:
函数原型:
CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt=NULL,LPCTSTR lpszFileName=NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPR OMPT,LPCTSTR lpszFilter=NULL,CWnd * pParentWnd
=NULL);
参数说明:
bOpenFileDialog:为TRUE或FALSE。TRUE为打开文件;FALSE为保存文件。
lpszDefExt :为缺省的扩展名。
lpszFileName :为显示在文件名组合框的编辑框的文件名,一般可选NULL
dwFlags :为对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,即隐藏只读选项和覆盖已有文件前提示。
LpszFilter :为下拉列表枢中显示文件类型。
pParentWnd :一般可选NULL。
例如:在文件类型列表框的编辑框要显示“可执行文件(*.exe)”,而在它的下拉列表框中列出“视频文件(*.avi)、All Files(*.*)”内容,则变量定义如下:CFileDialog m_MyOpenDialog(TRUE,"exe",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"可执行文件(*.exe) | *.exe|视频文件(*.bat) | *.bat |All Files (*.*) | *.* ||",NULL);

注:没有*.*后的||显示时会多出一个空行.


成员函数:
CFileDialog::GetPathName //得到带路径的文件名
CFileDialog::GetFileName //得到文件名
CFileDialog::GetFileExt //得到扩展名
CFileDialog::GetFileTitle //得到不带扩展名的文件名



例:
void CDemoDlg::OnSave()
{
CFileDialog fd(FALSE,"exe",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"可执行文件(*.exe) | *.exe|视频文件(*.dat) | *.dat |All Files (*.*) | *.* ||",NULL);
if(fd.DoModal()==IDOK)
{
CFile f;
f.SetFilePath(fd.GetPathName());
CString str;
str.Format("The Path is %s .",f.GetFileName());
MessageBox((LPCTSTR)str);
f.Open((LPCTSTR)f.GetFileName(),CFile::modeCreate|CFile::modeReadWrite);

f.Close();
}


}



//文件读写到文本框
//Alon
int k;
CString FileName;

CFileDialog dlg(true);
dlg.DoModal();

FileName=dlg.GetPathName();
BYTE pfBuffer[65535]; //可将BYTE换成char等其他类型


CFile MyFile;

if(!MyFile.Open(FileName,CFile::modeReadWrite))
return; //如果取消文件打开

int Len=MyFile.GetLength();
MyFile.Read(pfBuffer,Len);

for(k=0;k<Len;k++)
{
BYTE a=pfBuffer[k];
strtemp.Format("%x",a); //将字符送入临时变量strtemp存放 //可将x 换成c等其他类型

m_strTXData+=strtemp; //加入接收编辑框对应字符串
}

MyFile.Close(); //文件关闭
UpdateData(false);

mibo2 2003-10-09
  • 打赏
  • 举报
回复
很感谢你,但不是很明白!

请说的再详细点行吗?

谢谢
mfc168 2003-10-09
  • 打赏
  • 举报
回复
open:

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
dlg.DoModal();
CString filename=dlg.GetFileName();
.....

Save As:
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
dlg.DoModal();
......
mfc168 2003-10-09
  • 打赏
  • 举报
回复
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

bOpenFileDialog
Set to TRUE to construct a File Open dialog box or FALSE to construct a File Save As dialog box.

yangrudy 2003-10-09
  • 打赏
  • 举报
回复
这里不好排版,希望没有影响大家阅读~~~~
yangrudy 2003-10-09
  • 打赏
  • 举报
回复
刚刚做了一个,如下:

//打开一个文本文件,写入编辑框
void CReadTextDlg::OnOpen()
{
CFileDialog *m_pFileDlg;
char FileName[200] = "";

static char BASED_CODE szFilter[] = "Text Document (*.txt)|*.txt|All Files (*.*)|*.*||";
m_pFileDlg=new CFileDialog(TRUE, NULL, NULL, OFN_FILEMUSTEXIST |
OFN_HIDEREADONLY , szFilter);

if(m_pFileDlg->DoModal() == IDOK)
{
m_EditBox = "";
UpdateData(FALSE);
strcpy(FileName, LPCTSTR(m_pFileDlg->GetPathName()));

CFile fileEditText;
if(fileEditText.Open(FileName, CFile::modeRead))
{
//char cBuf[512];
UINT uBytesRead;
while(uBytesRead = fileEditText.Read(cBuf, sizeof(cBuf)-1))
{
cBuf[uBytesRead] = NULL;
m_EditBox+=CString(cBuf);
}
fileEditText.Close();
UpdateData(FALSE);
}
}
}

//将编辑框里的文本文件保存
void CReadTextDlg::OnSave()
{
CFileDialog *m_pFileDlg;
UpdateData(TRUE);

static char BASED_CODE szFilter[] = "Text Document (*.txt)|*.txt|All Files (*.*)|*.*||";
m_pFileDlg=new CFileDialog(FALSE, "txt", NULL, OFN_FILEMUSTEXIST |
OFN_HIDEREADONLY , szFilter);

if(m_pFileDlg->DoModal() == IDOK)
{
CFile fileEditText;
if(fileEditText.Open(m_pFileDlg->GetPathName(), CFile::modeCreate+CFile::modeWrite))
{
fileEditText.Write((LPCSTR)m_EditBox, m_EditBox.GetLength());
fileEditText.Close();
}
}
}
不知道对你是否有帮助~~~~~~~~~~~

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧