怎么用CFileDialog打开一个txt文件 并让txt文件显示?CString m_szTmp;
CString m_szEditText;
char buf[1000];
CFileDialog dlg(TRUE,"mdl","*.txt");
if(dlg.DoModal()==IDOK)
{
m_szEditText = dlg.GetPathName();
CFile mfile;
mfile.Open(dlg.GetPathName(), CFile::modeRead);
mfile.Read(buf,sizeof(buf));
m_szTmp = buf;
m_szEditText = m_szTmp;
UpdateData(false);
mfile.Close();
}怎么不行啊 ?Open不能打开么 ?

解决方案 »

  1.   

    mfile.Read(buf,sizeof(buf));
    这句不对:
    mfile.Read(buf,1000);
    而且之前的buf最好初始化:char buf[1000] = {0};
      

  2.   

    //兼容ANSI和UNICODE
    #ifdef _UNICODE
    #define __fopen _wfopen
    #define __string wstring
    #define __ostringstream wostringstream
    #define __splitpath _wsplitpath
    #else
    #define __fopen fopen
    #define __string string
    #define __ostringstream ostringstream
    #define __splitpath _splitpath
    #endif
    /****************************************************************************
    获取文件内容并放在一个string里。
    ****************************************************************************/
    static
    bool GetFileString(const TCHAR* FilePath,__string& str)
    {
    FILE* fp; 
    fp = __fopen(FilePath, _T("rb")); 
    if (!fp)
    return false;

    //获取文件字符串个数
    fseek(fp,0,SEEK_END); 
    UINT length=ftell(fp); 
    rewind(fp); 

    //获取文件文本
    char* p;
    p=new char[length+1];
    fread(p,1,length,fp);  
    p[length]=NULL;

    #ifdef _UNICODE
    wchar_t* buf;
    buf = new wchar_t[length+1];
    setlocale(LC_ALL,".936");
    mbstowcs(buf,p,length+1);
    setlocale(LC_ALL,"C");
    str=buf;
    delete buf;
    #else
    str=p;
    #endif

    delete[] p;
    fclose(fp);
    return true;
    }
    /****************************************************************************
    获取文件内容并放在一个TCHAR*里,使用完要调用delete 删除。
    ****************************************************************************/
    static
    TCHAR* GetFileString(const TCHAR* FilePath)
    {
    FILE* fp; 
    fp = __fopen(FilePath, _T("rb")); 
    if (!fp)
    return false;

    //获取文件字符串个数
    fseek(fp,0,SEEK_END); 
    UINT length=ftell(fp); 
    rewind(fp); 

    //获取文件文本
    char* p;
    p=new char[length+1];
    fread(p,1,length,fp);  
    p[length]=NULL;

    #ifdef _UNICODE
    wchar_t* buf;
    buf = new wchar_t[length+1];
    setlocale(LC_ALL,".936");
    mbstowcs(buf,p,length+1);
    setlocale(LC_ALL,"C");
    delete[] p; //删除原来的char* 
    fclose(fp);
    return buf;
    #else
    fclose(fp);
    return p;
    #endif
    }
    /****************************************************************************
    保存文件。
    ****************************************************************************/
    static
    bool SaveFileString(const TCHAR* FilePath,__string& str)
    {
    FILE* fp = __fopen(FilePath, _T("wb")); 
    if (!fp)
    return false; int len=str.size();

    #ifdef _UNICODE//如果定义了unicode,则先转为ansi再保存
    //len是源字符串的长度 len=_tcslen(WindowText)
    //(len+1)*2是源字符串占用的内存空间,包括NULL结束符
    //nChars返回转换的字符个数,不包括NULL,既nChars=_tcslen(buf)
    //wcstombs会自动添加NULL结束符
    char* buf = new char[(len+1)*2];
    setlocale(LC_ALL,".936");
    int nChars = wcstombs(buf,str.c_str(),(len+1)*2);
    setlocale(LC_ALL,"C");
    fwrite(buf,1,nChars,fp);
    delete buf;
    #else
    fwrite(str.c_str(),1,len,fp);
    #endif
    fclose(fp);

    return  true;
    }/****************************************************************************
    保存文件。
    ****************************************************************************/
    static
    bool SaveFileString(const TCHAR* FilePath,const TCHAR* str)
    {
    FILE* fp = __fopen(FilePath, _T("wb")); 
    if (!fp)
    return false; int len=_tcslen(str);

    #ifdef _UNICODE//如果定义了unicode,则先转为ansi再保存
    //len是源字符串的长度 len=_tcslen(WindowText)
    //(len+1)*2是源字符串占用的内存空间,包括NULL结束符
    //nChars返回转换的字符个数,不包括NULL,既nChars=_tcslen(buf)
    //wcstombs会自动添加NULL结束符
    char* buf = new char[(len+1)*2];
    setlocale(LC_ALL,".936");
    int nChars = wcstombs(buf,str,(len+1)*2);
    setlocale(LC_ALL,"C");
    fwrite(buf,1,nChars,fp);
    delete buf;
    #else
    fwrite(str,1,len,fp);
    #endif
    fclose(fp);

    return  true;
    }/***********************************************测试代码**********************
    __string str;
    if (GetFileString(_T("d:\\a.txt"),str))
    {
    trace(str.c_str());
    str+=_T("jacky");
    bool rel=SaveFileString(_T("d:\\b.txt"),str);
    trace(rel);
    } {
    TCHAR* str=GetFileString(_T("d:\\a.txt"));
    if (str)
    {
    trace(str);
    bool rel=SaveFileString(_T("d:\\b.txt"),str);
    trace(rel);
    delete[] str;
    }
    }
    ****************************************************************************/
      

  3.   

    你怎么知道Open没有打开文件呢?
      

  4.   

    CFileDialog dlg(TRUE,"mdl","*.txt");
    好像不太对吧
      

  5.   

    这个问题,我遇到了,不过已经解决了。打开对话框读取txt文本内容到MFC 对话框里 的编辑框里。
    你可以百度一下:MFC 如何另存 保存对话框编辑框里的内容 ,即可找到个人网易博客,里面有完整的代码。
    或者直接点击进入个人网易博客http://blog.163.com/wenxianliang08@126/blog/#m=0http://www.95wangming.com
      

  6.   


    ?什么情况,怎么不行?
    读取出来了,要显示在哪里?
    EDIT控件,直接SetWindowsText(szEditText)
      

  7.   

    如果文件超过1000个字符要循环读的。先判断是否到达文件末尾,如果不是继续读,读完后拼接到转换为CString并调用str.Append(...)进行拼接中。否则,退出循环