C# 是否有办法处理所有文件/文件夹异常
在我详细阐述我的问题之前,我不是一个专业的程序员/程序员,但最近的一个项目涉及大量的读取文件、写入文件、将文件移动到文件夹等,我想知道如何最好地处理来自多个源的异常(所有这些都是文件/文件夹读取/写入) 该项目在一些基于文件的操作上有一个基本的“重试”功能,它将休眠一秒或2秒,然后重试最多X次-然后它将抛出一个消息框,基本上说明它无法执行此操作 是否有一种方法可以处理任何/所有文件/文件夹访问异常,为其创建一个“重试”例程—让它在最终放弃并通知某人之前重试以前尝试过的操作(但失败了)—或者这是应该按每个文件操作执行的操作 我想我想的是,对于许多应用程序,如果一个操作失败——应用程序知道它以前在做什么,可以重试——但不是编写相同的“重试”代码(根据尝试的操作修改代码)——是否可以使用单个例程重试 我甚至不确定这是否可能,更不用说推荐了 “重试”代码非常基本,如下所示:C# 是否有办法处理所有文件/文件夹异常,c#,.net,C#,.net,在我详细阐述我的问题之前,我不是一个专业的程序员/程序员,但最近的一个项目涉及大量的读取文件、写入文件、将文件移动到文件夹等,我想知道如何最好地处理来自多个源的异常(所有这些都是文件/文件夹读取/写入) 该项目在一些基于文件的操作上有一个基本的“重试”功能,它将休眠一秒或2秒,然后重试最多X次-然后它将抛出一个消息框,基本上说明它无法执行此操作 是否有一种方法可以处理任何/所有文件/文件夹访问异常,为其创建一个“重试”例程—让它在最终放弃并通知某人之前重试以前尝试过的操作(但失败了)—或者这是应
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;
}
}
int retrycount=3;
int重试次数=0;
while(重试次数<重试次数)
{
尝试
{
复制(SomeFile,SomeOtherFile);
}
捕获(例外e)
{
//再试一次
重试++;
}
if(File.Exists(SomeOtherFile)==true)
{
打破
}
}
稍后,“retries”用于确定它是否完全失败(retries==retrycount),并在发生这种情况时发出警报
如果有人能提供任何建议,或者即使只是告诉我我所想的是可能的——这是不推荐的,也会很有帮助。你可以通过传递一个
操作来做到这一点:
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);
public void重试(操作Action,int retryCount)
{
int重试次数=0;
while(重试次数<重试次数)
{
尝试
{
动作();
返回;
}
捕获(例外e)
{
//再试一次
重试++;
}
}
}
重试(()=>File.Copy(SomeFile,SomeOtherFile),3);
编辑:当然,之前也有人问过这个问题,请参见。您可以通过传递操作来实现这一点:
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);
public void重试(操作Action,int retryCount)
{
int重试次数=0;
while(重试次数<重试次数)
{
尝试
{
动作();
返回;
}
捕获(例外e)
{
//再试一次
重试++;
}
}
}
重试(()=>File.Copy(SomeFile,SomeOtherFile),3);
编辑:当然,以前也有人问过这个问题,请参见。一种方法:
- 1创建一个
队列
的{File,lastTest,Attempts}
- 2将所有文件添加到队列中
- 3从列表中获取条目
- 4如果上次尝试后没有足够的时间,请等待
- 5尝试操作,递增
尝试次数
- 6如果操作失败,请将
上次尝试
更新为日期时间。现在
,添加回队列末尾(除非尝试
大于某个阈值,在这种情况下,您将文件添加到失败文件列表中)
- 7如果队列中仍有条目,请从3开始重复
一种方法:
- 1创建一个
队列
的{File,lastTest,Attempts}
- 2将所有文件添加到队列中
- 3从列表中获取条目
- 4如果上次尝试后没有足够的时间,请等待
- 5尝试操作,递增
尝试次数
- 6如果操作失败,请将
上次尝试
更新为日期时间。现在
,添加回队列末尾(除非尝试
大于某个阈值,在这种情况下,您将文件添加到失败文件列表中)
- 7如果队列中仍有条目,请从3开始重复
我会稍微改变这一点,为
使用,保存一些代码行,并且不声明e
,因为这会引起警告。@Andrew你是对的,但在回答时,我倾向于让代码尽可能接近OP的代码。从整个重写过程中,他们学到的东西往往较少这类事情是否适用于其他事情,如数据库访问——例如尝试插入记录?它适用于任何事情。在这种情况下,您可能只需要在重试之间添加延迟。第三个参数是一个不错的选择。我会稍微改变这个参数,为
使用一个,保存一些代码行,并且不声明e
,因为这会引起警告。@Andrew你是对的,但在回答时,我倾向于让代码尽可能接近OP的代码。从整个重写过程中,他们学到的东西往往较少这类事情是否适用于其他事情,如数据库访问——例如尝试插入记录?它适用于任何事情。在这种情况下,您可能只需要在重试之间添加延迟。第三个参数是一个不错的选择。