各位牛人,我想做一个程序实现读取整个文件并以十六进制显示,可是在做文件读入时出了问题,
下面是代码,读取一个非文本文件时,为什么只显示文件头的几个字母,后面就没有了呢?如果想
实现读取任意文件应该怎么做?各位牛人,不吝赐教,在此谢过!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);}
下面是代码,读取一个非文本文件时,为什么只显示文件头的几个字母,后面就没有了呢?如果想
实现读取任意文件应该怎么做?各位牛人,不吝赐教,在此谢过!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);}
file.Read(buf, 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();
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));
}