Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#parchive/quickpar/par2修复实施?_C#_Repair - Fatal编程技术网

C#parchive/quickpar/par2修复实施?

C#parchive/quickpar/par2修复实施?,c#,repair,C#,Repair,我正在编写一个C#应用程序,它需要能够使用par2奇偶校验文件修复一组文件。 对于C++,有很多可以找到的,但是对于C i,我找不到本机实现。 一个选项是使用C++中的C++ DLL, 但我不想这样做,因为在x64应用程序中不可能使用32位dll,所以我会将我的应用程序限制为32位模式 另一个选项是在后台执行par2cmdline, 但我更希望对过程有更多的控制(进度、取消等) 有人知道一个本地C#实现可以使用par2集修复文件吗?这不是一个直接的答案,但我认为有一种方法可以将32位dll加载到

我正在编写一个C#应用程序,它需要能够使用par2奇偶校验文件修复一组文件。 对于C++,有很多可以找到的,但是对于C i,我找不到本机实现。

一个选项是使用C++中的C++ DLL, 但我不想这样做,因为在x64应用程序中不可能使用32位dll,所以我会将我的应用程序限制为32位模式

另一个选项是在后台执行par2cmdline, 但我更希望对过程有更多的控制(进度、取消等)


有人知道一个本地C#实现可以使用par2集修复文件吗?

这不是一个直接的答案,但我认为有一种方法可以将32位dll加载到64位应用程序中:

从文章中:

此解决方案需要额外的工作,因为必须创建加载32位DLL并公开其API的32位代理进程。此外,64位端还需要进行一些更改,因为使用者必须使用IPC技术之一,而不是直接访问32位DLL。值得注意的是,在极端情况下,这项额外工作可以与从头开始开发64位版本的32位DLL的工作相媲美

降低这些成本的一种可能方法是实现一个64位包装器DLL,它公开与原始32位DLL相同的函数、参数、类型等。然后,此包装器DLL可以对原始32位DLL进行基于IPC的调用,该DLL已加载到代理进程中


不久前我做过类似的事情。如果你看一下par2的源代码,它不是微不足道的。你可以很容易地把它移植到c#。可悲的是,所有的努力都会让你付出高昂的性能代价(如果你不相信我,试试看)

我最终通过CreateProcess调用了par2可执行文件。您可以获得stdin、stdout和strerr的句柄。因为可执行文件是一个控制台应用程序,所以您可以解析输出以获得进度。如果要“取消”该操作,可以随时终止该进程

这是一种草率的方法


“正确”的方法是将par2源代码移植到64位dll(出于性能原因,请坚持使用非托管C/C++dll)。

是否要坚持使用PAR本身?我有一个完全本地的Reed/Solomon实现,如果有帮助的话我会发布(PAR基于的匹配),但是我没有任何关于所有文件处理和分解的东西

我的代码是Stream的一个实现,并生成一个包含所有纠错数据的字符串。然后,您可以损坏该数据并将其发送回,it系统将自动恢复该数据。我只想发布它,但它很长,我太懒了,不想写一篇博文并链接到它

为了使这项工作像PAR一样,你必须把它分解成文件,然后构建一个系统,可以识别缺失的卷并“添加”所有缺失数据的损坏数据(数学不能处理丢失的数据,只损坏)。


另外,作为性能方面的说明,为其构建的系统相当“突发”,它一次可以接收到大量100k流,但也有很长的等待时间。C版本的数学运算速度比纯C版本快约6%。如果我只使用不间断加载进行性能测试,C#的运行速度会慢1-2%。根据我的经验,大多数C到C的数学转换都有相同的性能结果

谢谢!这是一种选择,尽管正如文章所提到的,它可能与完全用C#从头开始编写par2实现一样多。这是我不想从头开始编写的一件事……永远不会!:-)如果您声称知道将其移植到C#会导致性能大幅下降,请问您是如何知道的?你真的把它移植了吗,还是只是一个有根据的猜测?我不确定把它移植到C#会不会导致性能的大幅下降,只是我不想把时间花在这上面:)我喜欢这样的说法:“这不是小事。你可以毫不费力地把它移植到C#上。如果你能把它贴出来,我会非常感激,即使它只是作为参考。它可能对其他人也有用!好的,我会在今天下班后找到它,然后编辑这篇文章,在哪里可以找到代码。