有没有办法处理所有 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开始重复
在我详细说明我的问题之前 - 我不是专业人士 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开始重复