使用.NET读取Delphi TClientDataset文件

4

我需要使用.NET代码读取使用Delphi的TClientDataset类编写的文件。这里提到的解决方案(链接)对我无效。


3
我对TClientDataset一无所知,但也许你应该解释一下为什么那种解决方案对你不起作用? - Andreas Rejbrand
@Noffls,文件是以哪种格式编写的?XML还是二进制 - RRUZ
据我所知,CDS(二进制)格式没有文档记录(所以你在这里很难得到帮助)。你说你不能编写一个Delphi应用程序来将这些文件导出(或转换)为XML,因为该应用程序必须在非Windows平台上运行。但是,如果使用Delphi编写一个Web服务将这些文件公开为XML呢?(显然,此Web服务必须从Windows操作系统运行),然后从.NET消费此Web服务。 - RRUZ
不幸的是,Web服务也不可行,因为文件包含非常敏感的个人数据,所以这对我们来说不是一个解决方案。目前我正在尝试反向工程格式。它有点奇怪,但我认为这是可能的。 - Noffls
@Sam 这与使用 Web 服务相同。文件中的数据非常敏感,是个人隐私数据,不允许将文件发送到 Web 服务/FTP 服务器或类似的地方。 - Noffls
显示剩余4条评论
3个回答

3
“一个不在Windows平台上运行的dotNet程序”对我来说意味着您正在部署一个Mono应用程序。如果是在Linux上,尝试使用WINE并查看是否可以像预期那样使用上面建议的Delph应用程序。如果可以,那么您离开dotnet应用程序机器的问题就解决了,因为两者都将在相同的硬件上运行,无需通过网络通信。
编辑:由于OP现在指定他正在使用MonoDroid和Monotouch,因此无法使用Wine,剩下的选择是:
  • 反向工程格式(首先请咨询律师以保护自己免受伤害)
  • 向Embarcadero请求文件定义(我不抱太大希望)
  • 修改Delphi/C++应用程序以将文件导出为XML
  • 创建一个Delphi应用程序,在将*.cds预处理并导出到iOS/Android设备之前将其导出到XML。
这四个选择中,第四个可能是最快的-最好的选择是第三个。

第一个可能会让你陷入麻烦,因为世界各地都有反向工程的法律(在美国有DMCA,据说非常严苛 - 但我不是律师,也不是美国公民)。

第二个是一种赌注。


是的,Mono可以用;但它是为Monotouch和Mono for Android设计的。所以Wine不起作用。 - Noffls
最终我们决定修改原始应用程序,将数据集保存为XML格式。幸运的是,数据集的加载方法可以识别文件是二进制格式还是XML格式,因此旧版本的应用程序也可以加载新文件。 - Noffls

0
您需要使用Delphi编写一个小应用程序,读取cds文件并将其内容写入您可以从.Net中读取的文件中(选择适当的格式)。您可以下载Delphi的免费试用版。您可以在另一台计算机上开发应用程序。您可以通过ftp将输入的*.cds文件从有问题的平台传输到此新应用程序所在的计算机上。然后运行该应用程序并将新创建的输出文件通过ftp传输回您的有问题的平台,然后使用.Net读取它。
您可以使用ftp将文件从一个平台移动到另一个平台。如果有一个不错的工具需要使用(或即将制作!)在另一个平台上,没有理由将自己锁定在一个平台上。 :-)

正如我在原问题的评论中所写,由于不允许将数据发送到服务器/网络服务,因此无法将文件发送出去。 - Noffls
@Noffls,这是一个没有人知道如何阅读的.cds文件!使用USB存储设备!使用128位密钥加密cds文件!这个解决方案足够清晰和安全。没有人建议你在Facebook上发布它! - Sam
@Noffls,如果您没有访问该文件的权限,为什么还要尝试使用 .Net 读取它呢?为什么有人会认为 FTP/ WebService 传输比您未来的 .Net 代码更不安全呢? - Sam
@Noffls,如果你想用.Net读取它,那不就意味着你有权限访问文件的内容吗?哈哈,这与安全无关。 - Sam
@Sam:无意冒犯,但事实是我不能使用Web服务或服务器。我们的客户处理其他人的个人数据,如果他们将文件传输给任何第三方(包括我的公司),这将违反法律。 - Noffls
@Noffls,无论是否合法,没有砖头你就不能建造房屋。如果您没有访问此项目相关工件的权限(至少需要一个带有测试数据的样本cds-不必是真实数据!),那么您整个问题都是多余的。 - Sam

0

实际上,原始CD的二进制格式在由Hejlsberg/Hansen提交的相应美国专利中得到了广泛记录。我必须承认,后来的Borland增加了一些额外的功能(例如嵌套数据集支持),但基本上它仍然是完全相同的格式,并且通过对Midas源代码的深入挖掘(他们在D2010中发布了它),人们可以像我一样构建自己的解析器。


你的解析器是用什么语言编写的?它只能解释CDS文件还是可以直接将行写入CDS文件呢? - skibulk
这是我自己基于Delphi编写的Hyperbase实现的Midas部分。 - Vladimir Ulchenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接