【发布时间】:2014-09-23 13:57:31
【问题描述】:
我有一个包含员工数据和图像记录的文件。一名员工的每条记录及其数据、他的图像和他的妻子图像。 我无法更改文件结构
文本数据和图像之间有分隔符。
这里是一条记录的示例:
记录号D01=员工姓名!=IMG1=员工头像~\IMG2=妻子头像^! \r\n
(D01= & !=IMG1= & ~\IMG2= & ^!) 是分隔符
这是编写文件的代码:
FileStream fs = new FileStream(filePath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
BinaryWriter bw = new BinaryWriter(fs);
sw.Write(employeeDataString);
sw.Write("!=IMG1=");
sw.Flush();
bw.Write(employeeImg, 0, employeeImg.Length);
bw.Flush();
sw.Write(@"~\IMG2=");
sw.Flush();
bw.Write(wifeImg, 0, wifeImg.Length);
bw.Flush();
sw.Write("^!");
sw.Flush();
sw.Write(@"\r\n");
sw.Flush();
那么如何读取那个文件呢?
【问题讨论】:
-
从根本上说,你有问题 - 除非你读取图像数据以确定文件的长度(如果它甚至支持它!)你无法可靠地检测文件何时结束并且条目的下一部分开始。基本上,这是一种损坏的文件格式。
-
是什么让您认为图像文件不能包含在解释为文本时为
\r\n的字节? -
不,你完全不正确。图像格式可以为所欲为。想象一个“原始”图像类型,它的标题仅由尺寸组成,然后是每个 RGB 像素 3 个字节(一个字节红色,一个字节绿色,一个字节蓝色)。现在想象一个像素,其红色值为 13,绿色值为 10。您最终会得到与
\r\n等效的 ASCII 字节嵌入文件中。您需要从根本上理解,文件的内容只是 一个字节序列。读者可以适当地解释它。 -
哦,这可能不太可能 - 但距离不可能还有很长的路要走。文件格式从根本上被破坏了——即使你能以某种方式保证该字节序列永远不会出现,扫描它与知道要读取多少数据开始相比是很痛苦的。
-
分隔符在二进制数据中没有意义。它是什么图像格式?具有固定尺寸的 BMP?那么你有一个很好的机会..jpg?不能可靠地工作。但是您仍然可能(并且可能需要)编写一个宽松的代码,该代码可以以半自动方式读取损坏的数据并将它们转换为适当的东西..
标签: c# encoding binaryreader binarywriter