有没有办法处理所有 file/folder 异常

Is there a way to handle all file/folder exceptions

在我详细说明我的问题之前 - 我不是专业人士 programmer/coder 但最近的一个项目涉及大量读取文件、写入文件、将文件移动到文件夹等,我想知道如何最好处理来自多个来源的异常(所有这些都是 file/folder reads/writes)。

该项目在一些基于文件的操作上有一个基本的 'retry' 设施,它会休眠一秒或两秒,然后最多重试 X 次 - 然后它会抛出一个消息框,基本上说明它做不到。

有没有办法采取 any/all file/folder 访问异常,为它创建一个 'retry' 例程 - 让它重试它之前尝试做的事情(但失败了)最终放弃并提醒某人 - 或者这是应该在每个文件操作基础上完成的事情吗?

我想我在想的是,对于许多应用程序来说,如果操作失败 - 应用程序知道它之前在做什么并且可以重试 - 而不是编写相同的 'retry' 代码(使用根据尝试的操作修改了代码)- 是否可以有一个例程来重试它?

我什至不确定是否可行,更不用说推荐了。

'retry' 代码非常基础,类似于以下内容:

int retrycount = 3;
int retries = 0;

while (retries < retrycount)
{
   try
   {
      File.Copy(SomeFile, SomeOtherFile);
   }
   catch (Exception e)
   {
      // Try Again
      retries++;
   }

   if (File.Exists(SomeOtherFile) == true)
   {
      break;
   }
}

稍后,'retries' 用于确定它是否完全失败(重试 == 重试次数)并在发生这种情况时发出警报。

如果有人可以提供任何建议,或者即使只是告诉我我的想法是可能的 - 不推荐,也会有所帮助。

您可以通过传递 Action:

public void Retry(Action action, int retryCount)
{
    int retries = 0;

    while (retries < retryCount)
    {
       try
       {
          action();
          return;
       }
       catch (Exception e)
       {
          // Try Again
          retries++;
       }
    }
}


Retry(() => File.Copy(SomeFile, SomeOtherFile), 3);

编辑:当然之前有人问过这个问题,请参阅 How to implement re-try n times in case of exception in C#?

一种方法:

  • 1 创建一个 Queue{File, LastAttempt, Attempts}
  • 2 将所有文件添加到队列
  • 3 从列表中获取条目
  • 4 如果自上次尝试后时间不够,等待
  • 5 尝试运算,递增Attempts
  • 6 如果操作失败,将 LastAttempt 更新为 DateTime.Now,添加回队列末尾(除非 Attempts 大于某个阈值,在这种情况下您添加文件到失败文件列表)
  • 7 如果队列中还有条目,从3开始重复