1. MFC的CFILE 打开文件为什么老是出错
【问题详细内容】用fopen打开二进制文件,先用wb+,如果成功开始读写,如果失败用rb+打开,然后读写,如果再失败,退出程序,每次失败都会返回GetLastError(),有时候成功,有时候两次都显示错误123。查询后发现123是卷标或路径的语法错误,首先针对的是同一文件,其次用的路径是windows传给我的参数,但是有时会出错,有时不会。是怎么 回事?【解答】检查出错的时候,是不是文件名中有空格,或者有中文。如果是,那么就别用fopen了,用CFile类来代替吧。然后给程序里增加一些调试信息,当出错的时候,把文件名打印出来看看是否正确。发送方用的strlen()+1定义长度,这样可以把字符串尾部的结束符一起发送过去
2. MFC二进制转换字符串
把二进制数据按十六进制(其它进制也行)输出就行了啊,比如:
//把二进制数据输出成16进制可打印字符串,如:
//123456->010203040506
//输出格式也可以自己改下
int Bin2Str(const char *pSourc, char *pDes, int iLenOfSourc)
{
if (pSourc == NULL || pDes == NULL)
{
return -1;
}
for (int i = 0; i < iLenOfSourc; ++i,pDes += 2)
{
sprintf(pDes, "%02x", pSourc[i]);
}
return 0;
}
调用:
char cTest[]={1,2,3,4,5,6,7,8,9};//测试数据,就是你从文件读取出来的二进制数据
char cBuf[20] = {0};//接收缓冲区,大小要够,可以动态分配
Bin2Str(cTest, cBuf, strlen(cTest));//如果二进制数据中间有0这种数据,不能用strlen来计算
cBuf里面的就是可以显示字符串了,可以给控件赋值
3. mfc 怎么完成对txt文件的读取和写入
我写了一个。
界面一个文本框两个按钮,文本框关联一个CString型变量m_Data,设置属性为Verticalscroll和Wantreturn。
两个按钮对应的读写函数分别如下
voidCFileTxtDlg::OnRead()
{
//TODO:
CFileDialogfDlg(TRUE);
fDlg.m_ofn.lpstrFilter="TextFiles(*.txt) *.txt ";
if(fDlg.DoModal()==IDOK)
{
CStdioFilestdFile;
stdFile.Open(fDlg.GetPathName(),CFile::modeRead|CFile::typeBinary);
DWORDfileLen=stdFile.GetLength();
char*pBuf=newchar[fileLen+1];
pBuf[fileLen]=0;
stdFile.Read(pBuf,fileLen);
UpdateData();
m_Data=pBuf;
UpdateData(FALSE);
deletepBuf;
stdFile.Close();
}
}
voidCFileTxtDlg::OnWrite()
{
//TODO:
UpdateData();
CFileDialogfDlg(FALSE);
fDlg.m_ofn.lpstrFilter="TextFiles(*.txt) *.txt ";
fDlg.m_ofn.lpstrDefExt="txt";
if(IDOK==fDlg.DoModal())
{
CStdioFilestdFile;
stdFile.Open(fDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
stdFile.WriteString(m_Data);
stdFile.Close();
}
}
如要源代码发消息
4. 怎么读取MFC工程中的资源文件
如果是字符串资源,那么使用APP->LoadString(IDS_XXXX);就可以了,如果资源不是二进制的,那么推荐这样使用。
如果是二进制资源(比如音频文件),那么注意不能使用字符串变量接收,因为有可能遇到\0造成无法读取。方法很多,直接网络“VC 二进制资源”即可,代码很多,就不复制了。