23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152

Поиск всех доступных файлов в заданном каталоге

29.01.2019, 20:20. Показов 2122. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем доброго времени суток, вот столкнулся с такой проблемой. есть например любой каталог например диск "E:". в нем нужно выполнить поиск всех файлов (во всех каталогах и подкаталогах). принялся было копать в направлении
Pascal
1
var a := EnumerateAllFiles('путь к папке', '*.*').ToArray();
да только есть там папки, например system volume information и т.п. на которых выбрасывается исключение
Pascal
1
System.UnauthorizedAccessException
пропускать он его не хочет и в итоге приходится заморачиваться - ловить исключение, составлять вначеле список всех доступных каталогов, потом в этих каталогах искать еще каталоги и так до конца а только потом искать в каждом из них файлы. только это сильный гемор и это все багает - иногда кодировка слетает иногда файлы не видит.
нельзя ли проще? помогите, пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2019, 20:20
Ответы с готовыми решениями:

Вывести на экран абсолютные пути всех файлов, которые находятся в заданном каталоге и всех его подкаталогах
Не могу вернуть масив с директориями...( Если выводить на экран в цикле, то все нормально, но когда с main вывожу возвращаемый массив,...

Вывести на консоль размеры и права доступа для всех файлов в заданном каталоге и всех его подкаталогах
Написать скрипт с использованием цикла for, выводящий на консоль размеры и права доступа для всех файлов в заданном каталоге и всех его...

Получить и вывести на экран абсолютные пути всех файлов, которые находятся в заданном каталоге и всех его подк
Получить и вывести на экран абсолютные пути всех файлов, которые находятся в заданном каталоге и всех его подкаталогах public String...

4
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
30.01.2019, 00:59
Лучший ответ Сообщение было отмечено NSIFS211 как решение

Решение

Надо сделать свою рекурсивную функцию, которая бы находила все файлы, на которые даёт разрешение:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
function EnumerateAvailableFiles(path: string): sequence of string;
begin
  try
    
    Result := 
      System.IO.Directory.EnumerateFiles(path) +
      System.IO.Directory.EnumerateDirectories(path).SelectMany(EnumerateAvailableFiles);
    
  except
    on e: System.UnauthorizedAccessException do//если не даёт - тупо игнорим папку
      Result := System.Linq.Enumerable.Empty&<string>;
  end;
end;
На Стак оверфлоу все именно так решают, а для получения разрешения там наверное придётся намучатся с подписями, записями в реестре и т.п., и то не всюду доступ даст, наверняка.
1
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
30.01.2019, 22:42  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
рекурсивную функцию
подсознательно понимал, что тут рекурсия, только с последовательностями у меня туго, поэтому хз как это реализуется. несмотря на то что тот свой код таки отладил, этот проще и быстрее, спасибо большое.

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

Добавлено через 16 минут
кстати если кто хочет порофлить с того кода:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function FindAllFiles(path, progDir:string):array of string;
begin
  var enc:Encoding := Encoding.UTF8;
  var a:Text;
  Assign(a, (progDir + 'find.txt'));
  Rewrite(a, enc);
  Writeln(a, path);
  Close(a);
  var b, x:integer;
  x := 0;
  
  repeat
      var c:array of string := System.IO.File.ReadAllLines((progDir + 'find.txt'), enc);
      b := c.Length;
      Append(a, enc);
      
      for var i:integer := x to (c.Length - 1) do
        try
          var d:array of string := System.IO.Directory.EnumerateDirectories(c[i]).ToArray();
          for var ci:integer := 0 to (d.Length - 1) do Writeln(a, d[ci]);
        except on System.Exception do
          begin
          end;
        end;
        
      Close(a);
      x := c.Length;
  until (b = System.IO.File.ReadAllLines((progDir + 'find.txt'), enc).Length);
  
  var ld:array of string := System.IO.File.ReadAllLines((progDir + 'find.txt'), enc);
  Rewrite(a, enc);
  
  for var i:integer := 0 to (ld.Length - 1) do
    try
      var pf:array of string := System.IO.Directory.EnumerateFiles(ld[i]).ToArray();
      for var ci:integer := 0 to (pf.Length - 1) do Writeln(a, pf[ci]);
    except on System.Exception do
      begin
      end;
    end;
    
    Close(a);
    Result := System.IO.File.ReadAllLines((progDir + 'find.txt'), enc);
end;
все сделано через файлы с кучей повторений, так что скорость и простота не на высоте...
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
30.01.2019, 22:52
Цитата Сообщение от NSIFS211 Посмотреть сообщение
компилятор правда пишет что обнаружена бесконечная рекурсия
Скачайте последнюю версию, это сообщение уже несколько месяцев как исправили (убрали).

Добавлено через 1 минуту
Цитата Сообщение от NSIFS211 Посмотреть сообщение
on System.Exception do
А вот это не хорошо. Гасить надо только UnauthorizedAccessException.

И зачем что то ещё создавать, если моя функция работает, и возвращает тот же тип что и встроенная в паскаль функция. Делайте тоже .ToArray или что то типа того.
1
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
01.02.2019, 22:44  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
А вот это не хорошо. Гасить надо только UnauthorizedAccessException.
простите, но какая разница? я понимаю, что гасить абсолютно все исключения не очень хорошо, это мне объясняли типа если начнутся непредвиденные баги ты их можешь не увидеть и т.п. а тут ведь один хрен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2019, 22:44
Помогаю со студенческими работами здесь

Поиск файлов/папок в заданном каталоге
Всем привет! Подскажите пожалуйста, как осуществить следующие функции: Пользователь задает с клавиатуры путь и имя файла. Необходимо...

Вывести имена и размеры всех файлов в заданном каталоге и упорядочить их
Выведите на экран имена и размеры всех файлов в заданном каталоге. Отсортируйте • по дате изменения • по размеру • по алфавиту

Поиск файлов заданного размера в заданном каталоге (Bash)
Задание :Написать скрипт для поиска файлов заданного размера в заданном каталоге (имя каталога задаётся пользователем в качестве третьего...

Поиск и вывод имен файлов с определенными атрибутами в заданном каталоге
Здравствуйте! Дали задание: &quot;Поиск и вывод имен файлов с заданным(и) пользователем атрибутом(ами) в заданном пользователем каталоге&quot;...

Реализовать поиск в указанном каталоге всех файлов во всех поддиректориях и сформировать XML в нужном формате
Задача: Искать в указанном каталоге все файлы во всех поддиректориях и формировать XML в нужном формате. XML записать в директорию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru