【问题标题】:Guaranteed robust file copy over network in .net在 .net 中通过网络保证可靠的文件复制
【发布时间】:2015-09-21 02:12:44
【问题描述】:

根据某些特定项目的要求,需要通过(慢速)网络复制相当大的文件。执行此操作的软件当前使用 File.Copy 执行此操作。每当文件复制过程中发生错误时,该过程都会一次又一次地重试 File.Copy 操作。

由于网络的性质和传递文件的大小,在文件复制过程中的数据传输过程中会发生错误,这需要一遍又一遍地复制相同的数据。

我正在考虑一个解决方案,当文件以块的形式传递时,当一个块未能通过时(最好检查校验和),然后只再次请求这块数据,这样任何数据数据都已经通过并且已验证保存。类似于这些高级文件下载器,如果文件复制在中间失败,您可以下载部分文件。

我想知道是否有一些现成的解决方案可以用于此类目的。 提前致谢。

【问题讨论】:

  • 虽然我喜欢你的问题,但这不是 StackOverflow 的主题。您似乎在要求一个库或工具:这样的问题是特别离题的。
  • 是的,我认为这可能被认为是题外话。但是,这不是关于特定库的问题,我问的是如何在不发明轮子的情况下实现这一点。 IE。例如,我不知道 File.Copy 本身是否会进行块验证并在内部重试,并想知道是否有人可以指出正确的方向。

标签: .net distributed file-copying


【解决方案1】:

如果您不介意转换技术,您可以使用 FTP 传输,当然也有适用于 .net 的库。

FTP 允许您恢复传输。

如果您需要保证交付,您可能会考虑消息队列(但这不会阻止您在失败时重新发送)

【讨论】:

  • 不幸的是,这里不能使用 FTP,因为它需要在我们支持的所有机器上设置 FTP 服务器,这对于我们需要的东西来说有点开销。
  • MSMQ 的使用是可能的,但是,MSMQ 数据包的大小是有限的,使用所有 MSMQ 功能来发送数据文件块可能是一种开销。它还需要对所有分块/校验和实现进行编程。但我在想是否有一些标准的方法来解决这个问题,而无需编写所有的支持代码。
  • @AlexeyStolybko 所以基本上你搜索一个解决方案(这与 MicroVirus 指出的题外话一样),既不想做很多编码也不想在服务器上安装软件?如果您想坚持使用 File.Copy,您应该向我们展示您的代码并询问如何更改它,也许这甚至是 stackexchange 的 codereview 区域的主题。
  • 但是,要明确的是,我考虑了我的问题一段时间,而 FTP 似乎是专门为我需要的目的而发明的。如果我想要一些聪明的东西来进行分块和生成校验和 - 我需要某种服务器逻辑来执行此操作,这似乎与 FTP 协议提供的内容有很多重叠。感谢回复
猜你喜欢
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多