gpt4 book ai didi

C# 无法捕获所有异常

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:13 24 4
gpt4 key购买 nike

我正在编写一个 C# 应用程序(在 Linux 中使用单声道但它应该无关紧要)并且我正在使用 duplicati dll 进行编程。我希望程序永远不会崩溃,所以我试图捕捉每一个异常。现在的问题是抛出异常,我无法捕获它。也许来自一个线程?!?

旁注:出于测试目的,我故意尝试备份到我没有权限的位置。如果我授予权限,那么我不会收到任何错误。

代码如下所示:

try {
Interface i = new Interface(backend, options);
result = i.Backup(folders.ToArray());
} catch (Exception e) {
//Write to log.
//Here is no throw; !!
}

我得到以下堆栈跟踪:

Error : System.Exception: Failed to retrieve file listing: Access to the path "/home/pi/test" is denied. ---> System.UnauthorizedAccessException: Access to the path "/home/pi/test" is denied.
at System.IO.Directory.GetFileSystemEntries (System.String path, System.String searchPattern, FileAttributes mask, FileAttributes attrs) [0x00000] in <filename unknown>:0
at System.IO.Directory.GetFiles (System.String path, System.String searchPattern) [0x00000] in <filename unknown>:0
at System.IO.Directory.GetFiles (System.String path) [0x00000] in <filename unknown>:0
at Duplicati.Library.Backend.File.List () [0x00000] in <filename unknown>:0
at Duplicati.Library.Main.BackendWrapper.ListInternal () [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at Duplicati.Library.Main.BackendWrapper.ListInternal () [0x00000] in <filename unknown>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0

为什么我无法捕获所有异常?我做错了什么吗?

最佳答案

Error : System.Exception: Failed to retrieve file listing: Access to the path...

好吧,这是一个托管异常,您应该能够捕获它,就是这样。 Duplicati 正在对 native 库使用 Interop,该调用中的失败是调用堆栈所在的位置,但它正在展开并通过托管调用堆栈传播。

我写了一个非常快速的 Duplicati 示例,它捕获了所有异常...

也不异常(exception):

mono HelloDup.exe "/tmp"
File: Local folder or drive

捕获异常:

ls /home/private/privateinfo
ls: : Permission denied
mono HelloDup.exe "/home/private/privateinfo"
Exception: Access to the path "/home/private/privateinfo" is denied.: Type:System.UnauthorizedAccessException

捕获异常:

mono HelloDup.exe "/foobar"
Exception: The folder /foobar does not exist: Type:Duplicati.Library.Interface.FolderMissingException

捕获异常:

ls -l /noperms/private.txt
--w------- 1 root wheel 0 Jun 25 14:16 /noperms/private.txt
mono HelloDup.exe "/noperms/private.txt"
Exception: The folder /noperms/private.txt does not exist: Type:Duplicati.Library.Interface.FolderMissingException

代码示例:

try {
var file = new Duplicati.Library.Backend.File(args[0], options);
file.CreateFolder();
Console.WriteLine ("File: {0}", file.DisplayName);
} catch (Exception e) {
Console.WriteLine ("Exception: {0}: Type:{1}", e.Message, e.GetType());
}

后续步骤:

我会检查您正在使用的 Mono 和 Duplicati 的版本...如果您是 Mono 的基本系统安装,您可能真的落伍了。我还使用 xbuild 编译 Duplicati,所以我使用的是 GitHub master 分支的 HEAD。

关于C# 无法捕获所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055073/

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