在C#中将.ddd(数字行车记录仪)文件读取/解析为XML

本文关键字:读取 文件 XML 记录仪 ddd 中将 数字 | 更新日期: 2023-09-27 17:59:45

顺便说一句,我对C#还很陌生,需要将.ddd(数字行车记录仪输出文件扩展名)转换为.xml

作为第一步,我应该阅读该文件,所以我正在查看示例。我发现的每一个信息来源都在使用基于.txt的文件读取示例。我的示例中的文件类型.ddd与此相去甚远。

我在考虑二进制读取,但也不确定。正确的方法是什么?

在C#中将.ddd(数字行车记录仪)文件读取/解析为XML

答案很晚,但这个库在C#中,支持数字行车记录仪规范的大多数部分。

https://github.com/jugglingcats/tachograph-reader

该库提供了两个类,它们可以读取驾驶员和车辆卡二进制文件并写入XmlWriter。XML结构良好,为后续处理提供了二进制文件内容的清晰表示。请注意,该代码不会检查文件中的数字签名。

来自自述文件:

用法很简单。有一个主类DataFileReader和两个子类:VehicleUnitDataFile和DriverCardDataFile。您可以使用以下方法创建其中一个子层的实例:

DataFile vudf=VehicleUnitDataFile.Create();
DataFile dcdf=DriverCardDataFile.Create();

一旦你有了一个阅读器实例,你就可以给它一个要读取的二进制文件和一个XMLWriter:

vudf.Process("file.ddd", writer);

这两种数据文件格式的大部分部分/功能都得到了满足。可以使用DriverCardData.config和VehicleUnitData.config修改数据文件格式。这两个XML文件定义了具有特定于标准的功能(如循环缓冲区支持)的数据结构。

要执行转换,您需要知道:

  • 如何从文件中读取二进制数据
  • 文件可以包含的确切内容(每一个字节)
  • Xml中所需的输出

从文件中读取二进制数据相当简单——BinaryReader有各种方法来访问数据,尤其是如果数据可以在一次前向传递中处理(似乎就是这样)。有很多BinaryReader的例子。

更重要的是了解数据的含义。值为0x20的单个字节可能表示:

  • SPACE字符
  • 32
  • 该字节可以是具有完全不同值的UInt16的第一个字节
  • "下一个数据块长32字节"
  • "第一个数据块可以在偏移32处找到"
  • "下一个数据块是元数据"(此字节表示某种块类型
  • 墙上有32瓶啤酒

如果没有关于每个位置的每个字节的含义的信息,你就不会有任何进展。

然后,有了这些信息,并将文件读取到一些合适的类中,到Xml的转换就可以像将类传递给XmlSerializer一样简单。

还有现成的解决方案,如ReadESM(https://sourceforge.net/projects/readesm/files/)或DDD2XML(https://www.canlab.cz/en/DDD2XML)。DDD2XML还支持第二代行车记录仪。