gpt4 book ai didi

c# - 使用 Directory.EnumerateFiles 的可观察异常处理

转载 作者:太空宇宙 更新时间:2023-11-03 18:28:26 26 4
gpt4 key购买 nike

我对下面的代码有点困惑:

这是我认为应该发生的事情

  1. directorySearch 作为可观察对象创建,但由于未被枚举而未执行。

  2. Catch 扩展方法应该捕获所有可能的文件系统相关错误,我有一个额外的异常捕获用于调试。

发生了什么:

  1. 正在抛出异常! :(

    var counter = 0;

    var directorySearch = Directory.EnumerateFiles("//.", "*.*", SearchOption.AllDirectories).ToObservable();

    directorySearch
    .Catch<string, DirectoryNotFoundException>(tx => Observable.Return(string.Empty))
    .Catch<string, UnauthorizedAccessException>(tx => Observable.Return(string.Empty))
    .Catch<string, PathTooLongException>(tx => Observable.Return(string.Empty))
    .Where(next => !string.IsNullOrWhiteSpace(next))
    .Select(Path.GetFileName)
    .Do(_ => Debug.WriteLine("Logging, update some counter or something.."))
    .Do(_ => counter++)
    .Subscribe(_ => { Debug.WriteLine("File: " + _); });


    counter.Should().Be(18, "because there are that many files in the directory");

似乎 ToObservable 导致枚举发生。

System.IO.DirectoryNotFoundException : Could not find a part of the path 'D:\Projects\DirectorySearching\SearchingSamples\SearchingSamples\bin\Debug\fake'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
at System.IO.Directory.EnumerateFiles(String path, String searchPattern, SearchOption searchOption)
at SearchingSamples.searching_samples_using_linq.reactive_showing_data_stream_processing() in searching_samples_using_linq.cs: line 47

最佳答案

ToObservable 不会导致枚举发生。

如果传递的路径无效,Directory.EnumerateFiles 将自行抛出所有异常。 MSDN page for Directory.EnumerateFiles记录此行为:

DirectoryNotFoundException: path is invalid, such as referring to an unmapped drive.

关于c# - 使用 Directory.EnumerateFiles 的可观察异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28229046/

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