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 二進制資源」即可,代碼很多,就不復制了。