一、使用CFile的Read()函數(shù)和Write()函數(shù)讀寫文件
二、使用CArchive類的Read()和Write()函數(shù)進行緩沖讀寫,
創(chuàng).建CArchive對象前必須先建CFile對象,CArchive要用到CFile對象.
CArchive對象提供了一個類型安全緩沖機制,用于將可序列化對象寫入 CFile 對象或從中讀取可序列化對象。通常,CFile 對象表示磁盤文件;但是,它也可以是表示“剪貼板”的內(nèi)存文件(CSharedFile 對象)。
給定的 CArchive 對象要么存儲數(shù)據(jù)(即寫入數(shù)據(jù)或?qū)?shù)據(jù)序列化),要么加載數(shù)據(jù)(即讀取數(shù)據(jù)或?qū)?shù)據(jù)反序列化),但決不能同時進行。CArchive 對象的壽命只限于將對象寫入文件或從文件讀取對象的一次傳遞。因此,需要兩個連續(xù)創(chuàng)建的 CArchive 對象將數(shù)據(jù)序列化到文件,然后從文件反序列化數(shù)據(jù)。
將數(shù)據(jù)序列化到存檔時,存檔積累數(shù)據(jù),直到其緩沖區(qū)被填滿為止。然后,存檔將其緩沖區(qū)寫入 CArchive 對象指向的 CFile 對象。同樣,當您從存檔中讀取數(shù)據(jù)時,存檔會將數(shù)據(jù)從文件讀取到它的緩沖區(qū),然后從緩沖區(qū)讀取到反序列化的對象。這種緩沖減少了物理讀取硬盤的次數(shù),從而提高了應用程序的性能。
//下面是一個當前目錄下的gif圖片的讀取和另存操作
void Read_Write_Gif()
{
CFile file;
file.Open("abc.gif",CFile::modeRead); //打開圖像文件
DWORD dwDataLen=file.GetLength(); //獲取文件的長度
BYTE *buf=new BYTE[dwDataLen]; //創(chuàng)建數(shù)組,用來保存圖像的數(shù)據(jù)
memset(buf,0x00,dwDataLen); //初始化數(shù)組
file.ReadHuge(buf,dwDataLen); //圖像文件的數(shù)據(jù)保存在數(shù)組中
file.Close(); //關閉文件
CFile tempfile("temp.temp", CFile::modeCreate | CFile::modeWrite);//創(chuàng)建文件temp.temp
//(擴展名任意)
CArchive ar(&tempfile, CArchive::store); //創(chuàng)建緩沖區(qū)
ar.Write(buf,dwDataLen); //向緩沖區(qū)內(nèi)寫數(shù)據(jù),buf為保存圖像數(shù)據(jù)的數(shù)組,dwDataLen
//為數(shù)組的長度
/*for(int i=0;i<dwDataLen;i++) //也可以用operator<<進行寫操作
{
ar<<buf[i];
}*/
//tempfile.Write(buf,dwDataLen); //也可以只用CFile::Write進行寫操作
ar.Close(); //關閉緩沖區(qū)
tempfile.Close(); //關閉文件
}