我有一个存在于文本和二进制图像中的文件,我需要从 0 到 30 位置读取相关文本,而 31 上的位置将是二进制格式的图像。
我必须遵循哪些步骤才能解决该问题?
目前,我正在尝试使用它来阅读它FileStream
,然后我将 FileStream var 移至 1BinaryReader
如下所示:
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 命名空间的一部分。在下面的示例中,我使用的是系统图 http://msdn.microsoft.com/en-us/library/system.drawing.image.fromstream.aspx(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有一个警告 http://msdn.microsoft.com/en-us/library/system.io.binaryreader.basestream.aspx将 BaseStream 与 BinaryReader 结合使用,但我相信在上述情况下您应该是安全的,因为您没有在图像之后使用流。但要留意问题。If它失败了,你总是可以将字节读入新的byte[]
并从这些字节创建一个新的 MemoryStream。
EDIT:
您在评论中指出您的字符串是EBCDIC http://en.wikipedia.org/wiki/Extended_Binary_Coded_Decimal_Interchange_Code不幸的是,这意味着您无法使用任何内置编码来对其进行解码。谷歌快速搜索发现乔恩·斯基特发表的文章 http://www.eggheadcafe.com/articles/20030521.aspEBCDIC .NET Encoding 类可能会帮助您入门。它本质上会给你ebcdicEncoding.GetString(...);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)