各位牛人,我想做一个程序实现读取整个文件并以十六进制显示,可是在做文件读入时出了问题,
下面是代码,读取一个非文本文件时,为什么只显示文件头的几个字母,后面就没有了呢?如果想
实现读取任意文件应该怎么做?各位牛人,不吝赐教,在此谢过!void CReadFileDlg::OnBnClickedOpenfile()
{
// Show an open file dialog, select a file
CFileDialog fdlg(TRUE); fdlg.DoModal(); m_strFileName = fdlg.GetPathName(); CFile file;
CFileException fileException; if(!file.Open(m_strFileName.GetBuffer(), 
CFile::modeRead | CFile::typeBinary, &fileException))
{
fileException.ReportError();
return;
} char* buf = new char[file.GetLength()]; memset(buf, 0x00, file.GetLength());
file.Read(buf, file.GetLength());
m_strShowFile.Empty();
m_strShowFile.Append(buf); delete[] buf;
file.Close(); UpdateData(FALSE);}

解决方案 »

  1.   

    char* buf = new char[file.GetLength()];memset(buf, 0x00, file.GetLength());
    file.Read(buf, file.GetLength());
    你的文件有多大啊,如果文件小,可以你那样读;
    如果是很大的文件,你最好考虑内存映射文件
      

  2.   

    char* buf = new char[file.GetLength()];memset(buf, 0x00, file.GetLength());
    file.Read(buf, file.GetLength());
    m_strShowFile.Empty();
    m_strShowFile.Append(buf);delete[] buf;
    file.Close();///以上代码更改。
    char* buf = new char[file.GetLength()];
    if(buf)
    {
          memset(buf, 0x00, file.GetLength());
          file.Read(buf, file.GetLength());
          m_strShowFile.Empty();
          m_strShowFile.Append(buf);  //一个是可见字符, 一个是2进制, 不应该这样吧, 除非全部是可见字符的2进制, 要么再次格式化。
          delete[] buf;
    }
    file.Close();
      

  3.   

    CFileDialog fdlg(TRUE);
    fdlg.DoModal();
    CString m_strFileName = fdlg.GetPathName();
    CFile file;
    CFileException fileException;
    if(!file.Open(m_strFileName.GetBuffer(),  
    CFile::modeRead | CFile::typeBinary, &fileException))
    {
    fileException.ReportError();
    return  ;
    }
    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT2);
    unsigned char buf[1024]={0};
    char bufHex[2049]={0};
    int nReadCount = 0;
    while (nReadCount=file.Read(buf,sizeof(buf)))
    {
    pEdit->SetSel(-1,-1);


    for (int i = 0;i<nReadCount;i++)
    {
    sprintf_s(bufHex+i*2,3,"%02X",buf[i]);
    }

    pEdit->ReplaceSel(bufHex);
    pEdit->SetSel(-1,-1);
    pEdit->ReplaceSel("\r\n"); ZeroMemory(bufHex,sizeof(bufHex));
    ZeroMemory(buf,sizeof(buf));
    }
      

  4.   

    谢谢各位!#6代码中的sprintf_s函数没找到,查了一下,要包含stdio头文件,但是包含了还是没有找到,我用snprintf代替了一下,运行正确。