1. c#二進制文件的寫入和讀取
c#二進制文件的寫入和讀取,參考代碼如下:
usingSystem;
usingSystem.IO;
publicclassFileApp
{
publicstaticvoidMain()
{
//在當前目錄創建一個文件myfile.txt,對該文件具有讀寫許可權
FileStreamfsMyfile=newFileStream("myfile.txt",FileMode.Create,FileAccess.ReadWrite);
//創建一個數據流寫入器,和打開的文件關聯
StreamWriterswMyfile=newStreamWriter(fsMyfile);
//以文本方式寫一個文件
swMyfile.WriteLine("Hello,World");
swMyfile.WriteLine("abcdefghijklmnopqrstuvwxyz");
swMyfile.WriteLine("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
swMyfile.WriteLine("0123456789");
//沖刷數據(把數據真正寫到文件中去)
//注釋該句試試看,程序將報錯
swMyfile.Flush();
//以文本方式讀文件
//創建一個數據流讀入器,和打開的文件關聯
StreamReadersrMyfile=newStreamReader(fsMyfile);
//把文件指針重新定位到文件的開始
srMyfile.BaseStream.Seek(0,SeekOrigin.Begin);
//列印提示信息
Console.WriteLine("****************以文本方式讀文件*********************");
//列印文件文本內容
strings1;
while((s1=srMyfile.ReadLine())!=null)
{
Console.WriteLine(s1);
}
Console.WriteLine();
//以文本方式讀文件結束
//以二進制方式讀文件
//創建一個二進制數據流讀入器,和打開的文件關聯
BinaryReaderbrMyfile=newBinaryReader(fsMyfile);
//把文件指針重新定位到文件的開始
brMyfile.BaseStream.Seek(0,SeekOrigin.Begin);
//列印提示信息
Console.WriteLine("****************以二進制方式讀文件*********************");
//列印文件文本內容
Byteb1;
while(brMyfile.PeekChar()>-1)
{
b1=brMyfile.ReadByte();
//13為" ",表示回車;10為" ",表示換行
if(b1!=13&&b1!=10)
{
Console.Write("{0}",b1.ToString());
Console.Write(".");
}
else
{
Console.WriteLine();
}
}
Console.WriteLine(" ");
//以二進制方式讀文件結束
//關閉以上new的各個對象
brMyfile.Close();
srMyfile.Close();
fsMyfile.Close();
//讀取文件屬性
//列印提示信息
Console.WriteLine("****************讀取文件屬性*********************");
FileInfofiMyfile=newFileInfo("myfile.txt");
Console.WriteLine("文件名:{0}",fiMyfile.Name);
Console.WriteLine("文件名(含路徑):{0}",fiMyfile.FullName);
Console.WriteLine("文件大小(bytes):{0}",fiMyfile.Length);
Console.WriteLine("文件創建時間:{0}",fiMyfile.CreationTime);
}
}
2. C語言讀寫二進制文件讀取 大小端,該怎麼解
先看下面的代碼,然後我在簡短的解釋一下。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#define nmemb 7/****************************************************fopen和fclose是很常見的,在這里就不做解釋了。我們來看看fwrite和fread,本來以為這個很麻煩,但是用過之後發現這個二進制文件讀寫才是最簡單的。
size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
fwrite()用來將數據寫入文件流中。
stream為已打開的文件指針
ptr 指向欲寫入的數據地址
寫入的字元數以參數size*nmemb來決定。
size表示寫入一個nmemb的內存大小。
fwrite()會返回實際寫入的nmemb數目。
size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
fread()用來從文件流中讀取數據。
stream為已打開的文件指針
ptr 指向欲存放讀取進來的數據空間
讀取的字元數以參數size*nmemb來決定
size表示讀取一個nmemb的內存大小。
fread()會返回實際讀取到的nmemb數目,如果此值比參數nmemb 小,則代表可能讀到了文件尾或有錯誤發生,這時必須用feof()或ferror()來決定發生什麼情況。
返回實際讀取到的nmemb數目。
詳情參見上面的代碼。
另外就是大小端的問題了。關於大小端的具體解釋網上有很多,在此不作解釋。參考上面寫的代碼,我判斷了自己機器是大端還是小端,並且實現了int16,int32已經float數據類型的大小端轉換,大端轉小端,在使用相同的代碼一次小端又變成了大端。
PS:float的大小端轉化我之前一直以為寫的是錯的,因為好多數據轉化之後輸出都是0。後來發現可能是與float類型在內存中的存放有關,我們的程序是對的。
3. 如何讀取二進制文件
快速讀取二進制文件的方法如下: 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、對文件操作完畢後別忘了關閉文件。
4. 二進制文件的如何使用語句操作二進制文件
我們將上面的那個二進制文件保存為:TestBin.Bin 來舉例。讀取和寫入二進制其實是兩個很類似的操作,了解了其中之一,另一個也就不難了。
二進制文件我們通常使用直接讀取方式,Open 語句可以寫為:
引用:
Open( 12 , File = 'TestBin.Bin' , Access = 'Direct' , Form = 'Unformatted' , RecL = 4 )
上面的 Access 表示直接讀取方式,Form 表示無格式儲存。比較重要的是 RecL 。我們讀取數據時,是用記錄來描述單位的,每一次讀入或寫入是一個記錄。記錄的長度在 Open 時飢碰就確定下來,以後不能改變。如果需要改變,只能 Close 以後再此 Open。記錄長姿巧度在某些編譯器下表示讀取的 4 位元組長度的倍數,規定為 4 表示記錄長度為 16 位元組。有些編譯器下就直接跡肢鍵表示記錄的位元組數,規定為 4 則表示記錄長度為 4 位元組。這個問題需要參考編譯器手冊。在 VF 系列裡,這個值是前面一個含義。可以通過設置工程屬性的 Fortran,Data,Use Bytes as RECL= Unit for Unformatted Files 來改變,使之成為後一個含義。在命令行模式下,則使用 /assume:byterecl 這個編譯選項。確定 RecL 大小是我們需要做的事情,一般來說,不適合太大,也不適合太小。還需要結合數據儲存方式來考慮。太小的話,我們需要執行讀寫的次數就多,太大的話,我們就不方便操作小范圍的數據。有時候我們甚至會分多次來讀取數據,每一次的 RecL 都不同。對於上面的 TestBin.Bin 文件來說,它比較簡單,我以 16 位元組長度和 8 位元組長度兩種讀取方式來演示,你甚至可以一次 32 個位元組長度全部讀完。
5. vb.net二進制怎麼讀取文件
一、二進制文件讀寫
1、寫二進制數據到指定目錄
6. C++中怎樣進行二進制文件的讀寫
#include <fstream>
寫二進制文件應該使用ofstream類,文件的打開模式一定要是 binary,如果傳入的不是 binary, 文件將以ASCII方式打開。
下面是示例代碼,用於寫入文件。
std::ofstream fout("a.dat", std::ios::binary);
int nNum = 20;
std::string str("Hello, world");
fout.write((char*)&nNum, sizeof(int));
fout.write(str.c_str(), sizeof(char) * (str.size()));
fout.close();
而寫文本文件則比較簡單,如下:
std::ofstream fout("b.dat");
int nNum = 20;
std::string str("Hello, world");
fout << nNum <<","<< str << std::endl;
fout.close();
讀二進制文件
讀取二進制文件可以使用ifstream 類來進行,文件的打開模式一定要是 binary,如果傳入的不是 binary, 文件將以ASCII方式打開。
下面是示例代碼:
std::ifstream fin("a.dat", std::ios::binary);
int nNum;
char szBuf[256] = {0};
fin.read((char*)&nNum, sizeof(int));
fin.read(szBuf, sizeof(char) * 256);
std::cout <<"int = "<< nNum << std::endl;
std::cout <<"str = "<< szBuf << std::endl;
fin.close();
7. fscanf、fprintf讀寫二進制文件
1. myData和yourData兩個文件的大小;
逗鏈2. 用記事本方式(或文本方式)打開myData和yourData, 看是否出現亂碼.
山絕孫3. 用UltraEdit打開myData和yourData,對比一下結果.
寫讀二進制文件,參宏桐考如下:
#include<iostream>
#define N 10000
using namespace std;
void write()
{
int i, a[N];
for(i = 0; i < N; i++)
a[i] = i;
FILE *fp;
fp = fopen("yourData", "w");
for(i = 0; i < N; i++)
fprintf(fp, "%d ", a[i]);
fclose(fp);
}
void read()
{
FILE *fp;
fp = fopen("yourData", "r");
int i, a[N];
for(i = 0; i < N; i++)
fscanf(fp, "%d", &a[i]);
fclose(fp);
for(i = 0; i < N; i++)
cout << a[i] << endl;
}
int main()
{
write();
read();
return 0;
}
8. 如果二進制文件a.dat已經存在,現在要求寫入全新數據,應以什麼方式打開
如果二進制文件a.dat已經存在,現在要求寫入全新數據,應以「wb」方式打開,具體代碼如下:
FILE *fp;
fp=fopen(「a.dat」,「wb」);
就會將原來的文件內容全刪除,寫全新的數據。
在windows上,用記事本就可以打開文本文件了,但要打開二進制文件需要對應的二進制文件解碼器,因此,文本文件是更為大家所熟知的文件形式,而二進制文件的優點漏扮在於它的輸入輸出都省去了轉換的過程,而且更省空間。
(8)tffs二進制文件讀寫擴展閱讀:
二進制文件讀寫操作方法:
1、二進制文件操作
rb - 讀的時候獲取到的是二進制數據(bytes)
wb - 寫的時候寫入的內容要求類型是二進制文件
普通的文本文件可以通過二進制的形返譽灶式去打開,影響只是獲取到的內容,和寫進去的內容的數據類型;二進制文件只能以二進制的形式打開 (例如: 圖片、視頻、音頻等)
2、二進制數據
一般二進制數據都是通過網路請求獲取到,或者通過讀取本地的二進制文件來虛遲取到
(1)將字元串轉換二進制
bytes(字元串, 編碼方式)
字元串.encode(編碼方式)
(2)將二進制轉換成字元串
str(二進制數據, 編碼方式)
二進制數據.decode(編碼方式)
9. c語言如何讀寫二進制
內容的寫入分兩種,a.字元 b.位元組
前者可以寫一些字元串,後者主要用來內寫入 視頻,音頻那些數據容.
就像你用記事本打開 *.mp3文件一樣會出現亂碼。
而如果你想寫入字元串也出現亂碼,則應該修改寫入時的字元編碼格式。
有Unicode,utf-8,ansi,gbk等等。而windows有自己默認的讀取格式,所以當你寫入的格式與默認格式不相同時就會出現用記事本打開時出現亂碼了。
另一種情況是在寫入字元串之前對字元串進行加密。
如果需要具體的例子,可以M我QQ
10. C對二進制文件操作
C對二進制文件讀寫操作,可以用fread函數和fwrite函數實現;
1.函數功能
用來讀寫一個數據塊。
2.一般調用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.說明
(1)buffer:是一個指針,對fread來說,它是讀入數據的存放地址。對fwrite來說,是要輸出數據的地址。
(2)size:要讀寫的位元組數;
(3)count:要進行讀寫多少個size位元組的數據項;
(4)fp:文件型指針。
注意:1 完成次寫操(fwrite())作後必須關閉流(fclose());
2 完成一次讀操作(fread())後,如果沒有關閉流(fclose()),則指針(FILE * fp)自動向後移動前一次讀寫的長度,不關閉流繼續下一次讀操作則接著上次的輸出繼續輸出;
3 fprintf() : 按格式輸入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不過不是寫到控制台,而是寫到流罷了。
注意的是返回值為此次操作寫入到文件的位元組數。如int c = fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10位元組;str2: 10位元組;a:2位元組;b:8位元組,c為33,因為寫入時不同的數據間自動加入一個空格。