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