所以我有两个文件:一个 mot 文件和一个 xml 文件。我需要对这些文件做的是从 xml 文件中读取数据并将其与 mot 文件(如果存在)进行比较。这是一般的想法。
首先,对于那些不熟悉什么是 mot 文件的人(我也没有太多的知识,只是基础知识)......
(来自维基百科)一个 mot 文件(或摩托罗拉 S-Record 文件)是一种以 ASCII 十六进制文本形式传送二进制信息的文件格式。
(来自另一个来源)一个 S 记录文件由一系列特殊格式的 ASCII 字符串组成。S-record 的长度将小于或等于 78 个字节。S-Record 的格式为:
S | 类型 | 记录长度 | 地址(起始地址) | 数据 | 校验和
(例如 S21404200047524D5354524D0000801410AA5AA555F9)
([解析] S2 14 042000 47524D5354524D0000801410AA5AA555 F9)
具体的想法是我在地址0x042000~0x04200F中分配了数据AA BB CC DD等。xml中写的是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<record>
<File name="Test.mot">
<Address id="042000">
<Data>AA</Data>
</Address>
</File>
</record>
<record>
<File name="Test.mot">
<Address id="042001">
<Data>BB CC DD</Data>
</Address>
</File>
</record>
<record>
<File name="Test.mot">
<Address id="042004">
<Data>EE FF</Data>
</Address>
</File>
</record>
然后程序会从 XML 中获取数据和地址,并在 .mot 文件中搜索任何命中。因此,如果 mot 文件有记录S214042000AABBCCDDEEFF01234567891A2B3C4D5EF9
,那么这应该与 xml 中的内容匹配。结果为 true 或 1。如果 xml 中的任何内容不匹配,则它将返回 false 或 0。
现在的问题是我不精通 C#,更不用说 XML,尽管我确实对两者都有一点经验。我最初认为它会是这样的:
using (StreamReader sr = new StreamReader("Test.mot"))
{
String line =String.Empty;
while ((line = sr.ReadLine()) != null)
{
if (line.Contains("042004") & line.Contains("EE FF"))
{
Console.WriteLine("Success");
}
else
{
Console.WriteLine("Failure");
}
}
}
但很明显,这并没有达到我的预期。并且Failure
不断弹出。我可以StreamReader
用来阅读 .mot 文件吗?关于 XML 文件,会XMLDocument
起作用吗?如何从 xml 中获取数据并将其与 .mot 文件进行比较?有人可以指导我如何完成这项工作或提供如何正确开始的指南。
如果我对任何事情不清楚,请告诉我。
编辑:
我想到了一个主意。不过,我不确定这是否可行。假设程序将读取 mot S-Record 文件,它会识别记录的类型。从那里,文件中列出的每个记录行都将被分解,如下面的示例所示:
sample record line: "S214042000AABBCCDDEEFF01234567891A2B3C4D5EF9"
S2 - type w/c means there would be a 3-byte address
14 - record length
F9 - checksum
042000 - AA
042001 - BB
042002 - CC
042003 - DD
...
04200F - 5E
有了这个新列表,我想或者我希望程序可以更容易地使用 XML 中的数据在 mot 文件中定位它。
告诉我这是否可行,或者是否有其他选择。