Sonhospa Ответов: 1

Почему ошибка "часть пути не найдена"?


Всем привет,

Я адаптировал фрагмент кода (рекурсивный запрос LINQ) для создания списка привязки(FileInfo) по локальной сети. Это хорошо работает на локальном компьютере и, похоже, прекрасно работает на большинстве удаленных сетевых компьютеров.

Кажется, с запросом возникла проблема, так как в конце концов я получаю сообщение об ошибке "часть сетевого пути не может быть найдена". Это кажется странным, учитывая, что запрос сначала считывает пути, а затем не может их найти...

(EDIT: я проверил, что путь, вызывающий ошибку, существует, и с ними также нет проблем безопасности. Это должно быть что-то в коде)

Я твердо верю, что болезнь Альцгеймера не распространится на компьютеры: Может ли кто-нибудь помочь мне прояснить путаницу, а также, если необходимо, исправить синтаксис?

Большое спасибо,
С уважением
Майкл

Что я уже пробовал:

Try
    For Each result As FileInfo In dirInfo.GetFiles(pattern).Select(Function(file) file).Where(Function(s) supportedExtensions.Contains(Path.GetExtension(s.Extension).ToLower()))
        queue.Enqueue(result)
        report(dirInfo.FullName)
    Next result
    Task.WaitAll(dirInfo.GetDirectories().Select(
     Function(d) Task.Factory.StartNew(
       Sub() InternalCollectFiles(d, pattern, queue))).ToArray())

Catch e As UnauthorizedAccessException
Catch e As SecurityException
Catch e As DirectoryNotFoundException
    MsgBox(String.Format("Error: {0}", e.Message))

Catch ex As Exception
    MsgBox(String.Format("Error in 'InternalCollectFiles': {0}", ex.Message))

End Try

F-ES Sitecore

Когда возникает ошибка, посмотрите, к какому пути она пытается получить доступ. Либо путь неправильный, так как есть проблема с кодом, либо путь правильный, но не может быть доступен из-за проблемы безопасности. У нас нет доступа к вашей системе или вашей сети, поэтому мы не можем проверить эти вещи для вас.

Sonhospa

Вы его читали? Это совершенно другой вопрос, а не репост.

Maciej Los

Да, я читал это дважды. Единственное отличие заключается в том, что вы не упомянули (в своем предыдущем вопросе), что приведенный выше код генерирует такое сообщение об ошибке...

Sonhospa

1. поиск подхода для расширения запроса LINQ
2. Пытаясь разрешить исключения directorynotfoundexception

Совершенно разные задачи. Иметь (больше) прекрасный день.

Maciej Los

Не сердись на меня...
Общая часть ваших вопросов (даже если это один из них для меня) - это ваш код, который работает не так, как вы ожидаете. Пока вы не решили вопрос с DirectoryNotFoundException часть про расширения LINQ-запроса... менее важный. Или я ошибаюсь?

Я бы предложил переписать ваш вопрос и предоставить более подробную информацию о том, чего вы пытаетесь достичь. Было бы легче понять, как вам помочь.

Ваше здоровье!
Мацей

Sonhospa

Вы ошибаетесь. Ошибка возникает без какого-либо изменения запроса LINQ и, конечно же, не связана с его потенциальной дополнительной фильтрацией (которая, кстати, была первой нитью, которую я открыл). Конечно, два совершенно разных ответа, один на общий синтаксис LINQ и один на мою реализацию рекурсивной функции.

"Как бы я применил расширение к своей машине" имеет совершенно иную сферу применения, чем "в некоторых районах страны моя машина заикается", не так ли? И наверняка ответят разные люди. Это может быть тот же самый автомобиль, хотя (не обязательно).

А теперь давайте, пожалуйста, закончим эту чрезмерно академическую трату времени. Я не вижу, как кто-то будет получать удовольствие от репоста, но решил открыть два потока, заметив, что других критикуют за то, что они задают разные вопросы по своему коду в одном потоке, создавая таким образом запутанный поток, в котором никто не знает, что разрешено сейчас, а что нет.

Овации.

CHill60

Есть ли у папок, которые терпят неудачу, пробелы в их именах?

Sonhospa

Да, это так. Но 90% других папок, которые хорошо работают, также имеют пробелы в своих именах.

CHill60

Справедливо. Но я думаю, что Мацей его получил

Maciej Los

Я почти уверен, что причина вышеприведенной ошибки заключается в том, что задача еще не закончена.
Видеть: Класс Задач (System.Нарезание резьбы.Задачи) | Microsoft Docs[^]
c# - асинхронное перечисление папок - переполнение стека[^]

Sonhospa

Это, кажется, имеет большой смысл, так как задачи выполняются долго. Спасибо за подсказку, я немедленно перейду по ссылкам, которые вы мне предоставили!

Richard Deeming

Еще одна проблема, которую следует иметь в виду, заключается в том, что многие типы коллекций не являются потокобезопасными. Если не queue является одним из типов из System.Collections.Concurrent пространство имен, вы можете столкнуться с некоторыми причудливыми ошибками, когда начнете манипулировать им из нескольких потоков.

Maciej Los

Хорошая мысль, Ричард.

1 Ответов

Рейтинг:
2

Maciej Los

В соответствии с обсуждением в комментариях, есть несколько проблем с вашим кодом, которые могут вызвать A part of the network path could not be found ошибка. Вывод таков: вы должны изменить способ получения информации о файлах и папках. Довольно хорошее объяснение, как этого добиться, находится здесь: c# - асинхронное перечисление папок - переполнение стека[^]

Кроме того, я бы также предложил прочитать следующие статьи:
Как выполнить итерацию каталогов файлов с помощью параллельного класса | Microsoft Docs[^]
Более Быстрый Перечислитель Каталогов[^]
Перечисление файлов и каталогов в VB 2010[^]
c# - повышение производительности перечисления файлов и папок с помощью .NET - Stack Overflow[^]
c# - получить все файлы и каталоги в определенном пути быстро - переполнение стека[^]