?? sy0502.htm
字號(hào):
<html>
<HEAD>
<TITLE>Visual C++與計(jì)算機(jī)接口</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312" >
</HEAD>
<body>
<font color="#0000FF">訪問(wèn)磁盤(pán)文件</font>
<p>
(一)實(shí)驗(yàn)?zāi)康模?lt;BR>
訪問(wèn)磁盤(pán)文件<BR><BR>
(二)實(shí)驗(yàn)內(nèi)容:<BR>
(1) 利用MFC的CFile類(lèi)訪問(wèn)二進(jìn)制文件,該類(lèi)封裝了Windows API中處理二進(jìn)制文件的函數(shù)。<BR>
(2) 利用MFC的CStdioFile類(lèi)操作文本文件,CStdioFile從CFile類(lèi)派生,并封裝了C、C++語(yǔ)言中用來(lái)處理文本文件的函數(shù)。<BR><BR>
(三)實(shí)驗(yàn)方法:<BR><BR>
1、打開(kāi)并使用一個(gè)二進(jìn)制文件<BR><BR>
(1) 打開(kāi)一個(gè)二進(jìn)制文件<BR>
打開(kāi)一個(gè)二進(jìn)制文件,應(yīng)首先創(chuàng)建一個(gè)CFile類(lèi)對(duì)象,然后利用Open()成員函數(shù)打開(kāi)或創(chuàng)建一個(gè)文件對(duì)象。<BR>
CFile file;<BR>
file.Open("filename",CFile::modeCreate|CFile::modeWrite);<BR>
或 file.Open("filename",CFile::modeRead);<BR>
mode的不同,表明了文件的不同用途。<BR><BR>
(2) 文件使用完畢后,應(yīng)關(guān)閉文件,銷(xiāo)毀文件對(duì)象<BR>
file.Close();<BR><BR>
(3) 讀寫(xiě)二進(jìn)制數(shù)據(jù):<BR>
file.Write(buf,size);<BR>
nReadBytes=file.Read(buf,size);<BR>
buf為緩沖區(qū)指針,通常是一個(gè)對(duì)象的指針或一段內(nèi)存的首地址;size為讀寫(xiě)的長(zhǎng)度。<BR>
若nReadBytes為0或與size不同,表明已到文件結(jié)束處。<BR><BR>
(4) 獲得文件的長(zhǎng)度:<BR>
UINT nBytes=file.GetLength();<BR><BR>
(5) 改變文件讀寫(xiě)的當(dāng)前位置:<BR>
file.SeekToEnd();<BR>
file.SeekToBegin();<BR>
file.Seek(offset,CFile::begin);<BR>
offset為文件指針的移動(dòng)偏移量<BR><BR>
2、其它文件操作:<BR>
·檢查文件是否存在,使用CFile的靜態(tài)函數(shù)GetStatus():<BR>
CFileStatus status;<BR>
CString msg;<BR>
if (!CFile::GetStatus("filename",status))<BR>
{<BR>
msg.Format("%s does not exist",sFile);<BR>
AfxMessageBox(msg);<BR>
}<BR><BR>
·設(shè)置文件為只讀,使用CFile的靜態(tài)成員函數(shù)SetStatus():<BR>
if (CFile::GetStatus("filename",status))<BR>
{<BR>
status.m_attribute|=0x01;<BR>
CFile::SetStatus("filename",status);<BR>
}<BR><BR>
·刪除一個(gè)文件,使用CFile的另外一個(gè)靜態(tài)函數(shù)Remove():<BR>
CFile::Remove(sFile);<BR><BR>
3、訪問(wèn)文本文件<BR><BR>
·CFile類(lèi)是不能方便的訪問(wèn)文本文件的,訪問(wèn)文本文件可使用CFile的派生類(lèi)CStdioFile。<BR>
·CStdioFile類(lèi)中,可以使用WriteString和ReadString函數(shù)方便的讀寫(xiě)一行文本。<BR>
·CStdioFile類(lèi)是從CFile派生的,故CFile中的函數(shù)在CStdioFile類(lèi)中都可使用。<BR><BR>
(1) 打開(kāi)或創(chuàng)建一個(gè)文本文件:<BR>
CStdioFile file;<BR>
if (!file.Open (sFile, CFile::modeCreate | CFile::modeWrite | CFile::typeText))<BR>
{<BR>
CString msg;<BR>
msg.Format("Failed to create %s.",sFile);<BR>
}<BR>
(2) 從一個(gè)文本文件中讀一行文本:<BR>
CString sRecord;<BR>
file.ReadString(sRecord);<BR>
(3) 寫(xiě)一個(gè)文本串到文件中,但不在文本串末尾換行:<BR>
CString sRecord="test file";<BR>
file.WriteString(sRecord);<BR>
(4) 定位到文件的頭或尾:<BR>
file.SeekToEnd();<BR>
file.SeekToBegin();<BR>
(5) 關(guān)閉文件并銷(xiāo)毀創(chuàng)建的文件對(duì)象:<BR>
file.Close();<BR><BR>
4、二進(jìn)制文件訪問(wèn)實(shí)例:<BR>
CFile file;<BR>
CString msg;<BR>
CString sFile ("tmp.tmp");<BR>
If (!file.Open (sFile, CFile::modeCreate | CFile::modeWrite))<BR>
{<BR>
msg.Format("Failed to creat %s.",sFile);<BR>
AfxMessageBox(msg);<BR>
}<BR>
CString str("test file");<BR>
file.Write(str,str.GetLength());<BR>
file.Close();<BR>
if (!file.Open(sFile,CFile::modeRead))<BR>
{<BR>
msg.Format(“Failed to open %s.”,sFile);<BR>
AfxMessageBox(msg);<BR>
}<BR>
file.SeekToBegin();<BR>
UINT nBytes=file.GetLength();<BR>
char* buff=new char[nBytes];<BR>
nBytes=file.Read(buffer,nBytes);<BR>
CDC* pDC=GetDC();<BR>
pDC->TextOut(0,0,buff,nBytes);<BR>
ReleaseDC(pDC);<BR>
delete buff;<BR>
file.Close();<BR><BR>
<p></p>
</body>
</html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -