gpt4 book ai didi

c# - 关于异常处理,删除文件的最有效方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 22:08:30 24 4
gpt4 key购买 nike

MSDN 告诉我们,当您调用“File.Delete( path );”时在不存在的文件上生成异常。

调用 delete 方法并使用 try/catch block 来避免错误或在执行删除之前验证文件是否存在会更有效吗?

我倾向于认为最好避免使用 try/catch block 。当您知道如何检查错误时,为什么还要让错误发生。

无论如何,这是一些示例代码:

// Option 1: Just delete the file and ignore any exceptions

/// <summary>
/// Remove the files from the local server if the DeleteAfterTransfer flag has been set
/// </summary>
/// <param name="FilesToSend">a list of full file paths to be removed from the local server</param>
private void RemoveLocalFiles(List<string> LocalFiles)
{
// Ensure there is something to process
if (LocalFiles != null && LocalFiles.Count > 0 && m_DeleteAfterTransfer == true)
{
foreach (string file in LocalFiles)
{
try { File.Delete(file); }
catch { }
}
}
}

// Option 2: Check for the existence of the file before delting
private void RemoveLocalFiles(List<string> LocalFiles )
{
// Ensure there is something to process
if (LocalFiles != null && LocalFiles.Count > 0 && m_DeleteAfterTransfer == true)
{
foreach (string file in LocalFiles)
{
if( File.Exists( file ) == true)
File.Delete(file);
}
}
}

我要实现的目标的一些背景:该代码是 FTP 包装器类的一部分,它将 FTP 功能的特性简化为仅需要并且可以通过单个方法调用调用的功能。在这种情况下,我们有一个名为“DeleteAfterTransfer”的标志,如果设置为 true 将完成这项工作。如果文件一开始就不存在,我希望在达到这一点之前有一个异常。我想我在这里是在回答我自己的问题,但检查文件是否存在不如验证我有权执行任务或任何其他潜在错误重要。

最佳答案

考虑到 File.Delete,您基本上有三个选择当您的文件不存在时不会抛出异常:

  • 使用 File.Exists,每次都需要额外的磁盘往返(Alexandre C 的功劳),加上 File.Delete 的磁盘往返。这很慢。但是如果你想在文件不存在时做一些特定的事情,这是唯一的方法。

  • 使用异常处理。考虑到 entering a try/catch block is relatively fast (大约 4-6 m-ops,我相信),开销可以忽略不计,并且您可以选择捕获特定异常,例如文件正在使用时的 IOException。这可能非常有用,但是当文件不存在时您将无法执行操作,因为它不会抛出。 注意:这是避免竞争条件的最简单方法,正如 Alexandre C 在下面更详细地解释的那样。

  • 同时使用异常处理 File.Exists。这可能是最慢的,但只是稍微慢一点,并且是在文件不存在时捕获异常做一些特定的事情(发出警告?)的唯一方法。


我原来的回答的总结,给出了一些关于使用和处理异常的更一般的建议:

  • 当控制流足够时,不要使用异常处理,这样效率更高,可读性更强。
  • 仅对异常情况使用异常和异常处理。
  • 异常处理进入try/catch是非常高效的,但是当抛出异常时,这个开销相对较大。
  • 上述的一个异常(exception)是:无论何时处理文件函数,都使用异常处理。原因是竞争条件可能会发生,而且您永远不知道 if 语句和文件删除语句之间发生了什么。
  • 从不,我的意思是:永远不要对所有异常使用 try/catch(空 catch block ,这几乎总是您的应用程序中的一个弱点,需要改进。只捕获特定的异常.(异常(exception):当处理不是从 Exception 继承的 COM 异常时)。

关于c# - 关于异常处理,删除文件的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7037204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com