簡體   English   中英

如何在C#中讀取二進制文件?

[英]How do I read a binary file in C#?

我有一個存在於文本和二進制圖像中的文件,我需要從0到30的位置讀取有問題的文本,並且31的位置將是二進制格式的圖像。 要解決該問題,我必須遵循哪些步驟?

當前,我試圖使用FileStream讀取它,然后將FileStream var移動到一個BinaryReader ,如下所示:

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)
BinaryReader br = new BinaryReader(fs)

從那以后,我迷路了。


UPDATE

好了,現在我可以讀取文件了。 直到位置30是我的30字符串,從位置30開始是實際上是圖像的位字符串。 我想知道如何從位置30讀取字節,然后保存圖像! 有人有什么想法嗎? 遵循我文件中的示例,您會有一些想法:

£ˆ‰¢@‰¢@¢–”…@•…¦@„£@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.-///%<<??@[K}@k{M÷]kðñôôô}ù~øòLKóôòÿg

請注意,即使@@@是我的字符串,從該圖片起也將是一個字節。

用一些代碼擴展羅傑的答案。

字符串始終以某種格式編碼,要讀取它,您需要知道該編碼(尤其是在使用二進制讀取器時)。 在許多情況下,它是純ASCII碼,如果您得到意外的結果(奇怪的字符等),則可以使用Encoding.ASCII.GetString對其進行解析,然后嘗試另一種編碼。

要解析圖像,您需要使用圖像解析器。 .NET在其GUI名稱空間中有多個。 在下面的示例中,我使用的是System.Drawing (Windows窗體)中的一個,但WPF中存在類似的文件,並且那里有許多第三方庫。

using (var reader = new BinaryReader(File.Open(someFile, FileMode.Open))
{
    // assuming your string is in plain ASCII encoding:
    var myString = System.Text.Encoding.ASCII.GetString(reader.ReadBytes(30));
    // The rest of the bytes is image data, use an image library to process it
    var myImage = System.Drawing.Image.FromStream(reader.BaseStream);
}

現在,MSDN 對於將BinStream與BinaryReader結合使用已發出警告 ,但我相信在上述情況下,您應該是安全的,因為您不會在映像后使用流。 但是要注意問題。 如果失敗,則始終可以將字節讀取到新的byte[]並從這些字節創建新的MemoryStream。

編輯:

您在注釋中指出您的字符串是EBCDIC ,很遺憾,這意味着您無法使用任何內置的Encodings對其進行解碼。 谷歌的快速搜索顯示,喬恩·斯凱特(Jon Skeet)在EBCDIC .NET Encoding類上的帖子可能會讓您入門。 從本質ebcdicEncoding.GetString(...); ,它將為您提供ebcdicEncoding.GetString(...);

您可以使用FileStream打開和讀取文件。 如果您將前30個字節讀入緩沖區,則可以使用“ string Encoding.ASCII.GetString(byte []緩沖區,int偏移量,int長度)”將其轉換為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM