⑴ MFC讀取二進制文件
|讀寫二進制文件參考代碼:版
CFile rfile,wfile;
if(!權rfile.Open(_T("c://notepad.exe"),CFile::modeRead))
return 1;
if(!wfile.Open(_T("c://ee.exe"),CFile::modeCreate|CFile::modeWrite))
return 1;
BYTE buf[1024];
UINT readed;
while((readed=rfile.Read(buf,1024))>0)
{
wfile.Write(buf,readed);
}
rfile.Close();
wfile.Close();
⑵ 如何快速讀取二進制文件
快速讀取二進制文件的方法如下:
1、打開文件。
打開文件可以有兩種方式,第一種可以使用fstream類的構造函數。fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app); 另外一種方法就是使用
open函數。fstream file;file.open("test.dat",ios_base::in|ios_base::out|ios_base::app);
這樣就可以打開一個可讀寫的文件了。如果文件不存在的話,就會創建一個新文件並且以讀寫方式打開。這里需要說明一點,如果文件不存在的話,open函數中第二個參數必須包含ios_base::out|ios_base::app,否則就不能正確創建文件。
2、寫文件。
先進性寫文件的操作否則讀一個空文件是沒有意義的。
既然是寫二進制文件可以向文件中寫入一個整形值。寫二進制字元只能使用write
函數。但是write函數的原形是write(const char * ch, int size)。第一個參數是char *
類型,所以需要把將要寫入文件的int類型轉換成char *類型。這里的轉換困擾了我好幾天,不過終於弄明白了。代碼如下。int temp; file.write((char *)(&temp),sizeof(temp));
3、讀文件。
可以寫文件了,讀文件就好辦多了。讀文件需要用到read函數。其參數和write
大致相同,read(const char * ch, int size)。要把內容讀到int類型變數中同樣涉及到一個類型轉換的問題。和寫文件一樣。int readInt; file.read((char(&readInt),sizeof(readInt)); 這樣文件中的int值就讀入到int型變數
readInt中了。
4、文件指針。
在文件的讀寫過程中往往需要對文件進行選擇性讀取。所以需要進行文件指針的移動。這是需要用到seekg和seekp函數。在fstream類中有兩個文件指針,一個是讀取文件的指針
,一個是寫文件的指針分別用tellg和tellp文件來取得指針的位置。同樣seekg和seekp兩個函數分別是對這兩個指針進行移動的函數。這兩個函數的參數都是一樣的。先對幾個枚舉類型進行一下說明:
ios_base::beg ——文件開始位置ios_base::cur ——文件當前位置ios_base::end ——文件末尾位置下面以seekg為例說明一下指針移動的方法:file.seekg(3) ——指針移動到第三個字元的位置file.seekg(ios_base::beg) ——指針移動到文件開頭file.seekg(ios_base::end) ——指針移動到文件末尾file.seekg(-3,ios_base::cur) ——
指針當前位置向前移動三個字元file.seekg(3,ios_base::cur) ——指針當前位置向後移動三個字元file.seekg(3,file.tellg()) ——指針當前位置向後移動三個字元file.seekg(file.tellg()+3) ——指針當前位置向後移動三個字元
5、對文件操作完畢後別忘了關閉文件。
⑶ C語言怎麼讀取二進制文件中的數據放到一個300×300的二維數組裡面
用 fopen 打開文件時 設 "rb" --用二進制方法打開,用於讀
用 fread 讀取數據,函數原型是:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
各參數意義,請查編譯器幫助文件,這里就不開課了。
300×300 的數組需要的內存量較大,可動態分配,或用 全局量。
下面是程序例子。先建了一個2進制文件,裡面存了300*300個float型數據。然後讀這個文件里的內容。
#include<stdio.h>
float a[300][300];
int main()
{
FILE *fin, *fout;
int i,j;
for (j=0;j<300;j++) for (i=0;i<300;i++) a[j][i]=j*100+i;
fout=fopen("a.txt","wb");
for (j=0;j<300;j++)
fwrite(&a[j][0],sizeof(float),300,fout);
fclose(fout);
for (j=0;j<300;j++) for (i=0;i<300;i++) a[j][i]=0; //數組清零
fin=fopen("a.txt","rb"); //打開輸入文件
for (j=0;j<300;j++)
fread(&a[j][0],sizeof(float),300,fin); //讀文件
fclose(fin); //關閉文件
// 下面輸出文件的左上角100個數據,和右下角100個數據供檢查參考。
for (j=0;j<10;j++) {
for (i=0;i<10;i++)printf("%3.0f ",a[j][i]); printf("\n");}
printf("\n");
for (j=290;j<300;j++){
for (i=290;i<300;i++)printf("%g ",a[j][i]); printf("\n");}
return 0;
}