如何创建可恢复的文件上传者控制台应用程序?

时间:2009-12-31 15:08:30

标签: c# console recovery

我正在将数千个文件上传到服务器。

服务器连接断开分配,所以我需要一种方法让这个控制台应用程序能够在连接失败几秒钟后恢复等。

我的应用程序很简单,它只是获取c:\ uploads文件夹中的所有文件,然后使用Web服务将文件上传到服务器。

这样:

foreach(文件中的字符串文件) {        UploadToServer(文件); }

如何在连接失败的情况下重新覆盖? (失败通常只持续几秒钟)

2 个答案:

答案 0 :(得分:1)

使用一个小帮手方法,重复上传几次,然后再放弃。例如:

static void UploadFile(string file) {
  for (int attempt = 0; ; ++attempt) {
    try {
      UploadToServer(file);
      return;
    }
    catch (SocketException ex) {
      if (attempt < 10 && (
          ex.SocketErrorCode == SocketError.ConnectionAborted ||
          ex.SocketErrorCode == SocketError.ConnectionReset ||
          ex.SocketErrorCode == SocketError.Disconnecting ||
          ex.SocketErrorCode == SocketError.HostDown)) {
        // Connection failed, retry
        System.Threading.Thread.Sleep(1000);
      }
      else throw;
    }
  }
}

根据需要调整异常处理代码。

答案 1 :(得分:0)

如果文件无法上传,是否会抛出异常?如果有,则处理异常,然后将这些文件存储在某种容器中以便稍后重试,或者你可以放一些Thread.Sleep等待一点再重试。