[英]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.