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

Ege*_*rak 6 c# file-conversion

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

作为第一步,我应该阅读该文件,因此我正在查看示例。我找到的每个信息来源都使用 .txt基于读取文件的示例。在我的示例中,文件类型.ddd远不及此。

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

jug*_*ats 8

很晚的答案,但这个库是用 C# 编写的,并且支持数字行驶记录仪规范的大部分内容。

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

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

从自述文件:

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

DataFile vudf=VehicleUnitDataFile.Create();
DataFile dcdf=DriverCardDataFile.Create();
Run Code Online (Sandbox Code Playgroud)

一旦你有了一个 reader 实例,你就可以给它一个二进制文件来读取和一个 XML Writer:

vudf.Process("file.ddd", writer);
Run Code Online (Sandbox Code Playgroud)

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


C.E*_*uis 3

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

  • 如何从文件中读取二进制数据
  • 文件到底可以包含什么(每个字节)
  • Xml 中所需的输出

从文件中读取二进制数据相当简单 -BinaryReader有各种方法来访问数据,特别是如果数据可以在单个正向传递中处理(似乎就是这种情况)。那里有很多BinaryReader例子。

更重要的是了解数据的含义。单个字节的值0x20可能意味着:

  • 人物SPACE
  • 价值32
  • UInt16该字节可能是具有完全不同值的 a 的第一个字节
  • “下一个数据块的长度是 32 字节”
  • “第一个数据块可以在偏移量32处找到”
  • “下一个数据块是元数据”(该字节指示某种块类型
  • 墙上挂着32瓶啤酒

如果不了解每个位置的每个字节的含义,您将一事无成。

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