Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70

Не находит папки и файлы с кириллицей в названии

16.03.2025, 19:16. Показов 1731. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если в папке С:\Тест есть вложенные папки с кириллицей то код

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
EnableExplicit
 
Define directory.s = "C:\Тест\"  ; Укажите путь к папке
Define file.s
Define dirID = ExamineDirectory(#PB_Any, directory, "*.*")  ; Открываем папку
 
If dirID
  While NextDirectoryEntry(dirID)  ; Читаем файлы и папки
    If DirectoryEntryType(dirID) = #PB_DirectoryEntry_File  ; Только файлы
      file = directory + DirectoryEntryName(dirID)
      Debug file  ; Вывод пути к файлу
    EndIf
  Wend
  FinishDirectory(dirID)  ; Закрываем папку
Else
  Debug "Ошибка открытия папки!"
EndIf
не находит ни эти папки, ни файлы, которые в них содержатся. В чем причина? Можно исправить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2025, 19:16
Ответы с готовыми решениями:

Определить название папки, в которой находится doc-файл
Как определить название родительской относительно doc-файла папки? Можно полный путь, можно название собственно папки. Поиск не помог....

Открыть из макроса папку, в которой находится файл с этим макросом
Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = True .InitialFileName = "*.*" .Title = "ВЫБЕРИТЕ ПРОМЕЖУТОЧНУЮ...

Сохранение листа книги в новый файл с определенным названием в новую папку с таким же названием в определенной папке
Привет всем профи и любителям! Прошу помочь с написанием макроса. Имеется книга с 2 листами. На лист1 вводятся данные (типа...

8
Эксперт по электронике
6800 / 3227 / 335
Регистрация: 28.10.2011
Сообщений: 12,595
Записей в блоге: 7
16.03.2025, 19:55
Лучший ответ Сообщение было отмечено winkot как решение

Решение

Цитата Сообщение от winkot Посмотреть сообщение
есть вложенные папки с кириллицей то код не находит ни эти папки, ни файлы, которые в них содержатся.
А если кириллицы нет то находит?
В коде нет поиска вложенных папок. Будут найдены только файлы в C:\Тест\
Для этого нужно искать во всех вложенных папках.
PureBasic
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
EnableExplicit
 
Procedure SearchFiles(Directory.s) ; Сканирование папки 
  Protected id, Name.s
  
  If Right(Directory,1)<>"\":Directory + "\":EndIf
  
  id=ExamineDirectory(#PB_Any, Directory, "*.*")
  If id
    While NextDirectoryEntry(id)
      Name.s=DirectoryEntryName(id)
      
      If Name = "." Or Name = ".."
        Continue
      EndIf
      
      If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
        SearchFiles(Directory+Name)
      Else
        Debug Directory+Name
      EndIf
      
    Wend
    FinishDirectory(id)
  EndIf
  
EndProcedure 
 
Define directory.s = "D:\Тест\"  ; Укажите путь к папке
SearchFiles(directory)
1
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
16.03.2025, 20:18  [ТС]
Спасибо! Ваш код отлично работает. В первом сообщении я действительно ошибся выложил не тот код. Вот код
PureBasic
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
45
46
47
48
49
50
51
Procedure FileListToArrayRecursive(directory.s, Array files.s(1), pattern.s = "*", flags = 0)
  ; Проверяем, существует ли директория
  If Not ExamineDirectory(0, directory, pattern)
    Debug "Ошибка: Директория не существует или не может быть открыта: " + directory
    ReDim files(0) ; Возвращаем пустой массив
    ProcedureReturn 0
  EndIf
 
  ; Перебираем элементы директории
  While NextDirectoryEntry(0)
    ; Получаем имя элемента
    name.s = DirectoryEntryName(0)
 
    ; Игнорируем специальные директории "." и ".."
    If name = "." Or name = ".."
      Continue
    EndIf
 
    ; Полный путь к элементу
    fullPath.s = directory + "\" + name
 
    ; Проверяем, является ли элемент подкаталогом
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      ; Рекурсивно обходим подкаталог
      FileListToArrayRecursive(fullPath, files(), pattern, flags)
    EndIf
 
    ; Проверяем флаги
    If flags = 0 Or (flags = 1 And DirectoryEntryType(0) = #PB_DirectoryEntry_File) Or (flags = 2 And DirectoryEntryType(0) = #PB_DirectoryEntry_Directory)
      ; Добавляем элемент в массив
      index = ArraySize(files())
      ReDim files(index + 1)
      files(index) = fullPath
    EndIf
  Wend
 
  ; Возвращаем количество найденных элементов
  ProcedureReturn ArraySize(files())
EndProcedure
 
; Пример использования
Dim files.s(0) ; Создаем пустой массив
count = FileListToArrayRecursive("C:\Тест", files(), "*.txt", 1) ; Ищем все файлы .txt
If count > 0
  Debug "Найдено файлов: " + Str(count)
  For i = 0 To count - 1
    Debug "Файл: " + files(i)
  Next
Else
  Debug "Файлы не найдены."
EndIf
который не находит вложенные папки с кириллицей. Не подскажите, что с ним не так?
0
Эксперт по электронике
6800 / 3227 / 335
Регистрация: 28.10.2011
Сообщений: 12,595
Записей в блоге: 7
16.03.2025, 22:18
Цитата Сообщение от winkot Посмотреть сообщение
Не подскажите, что с ним не так?
Задан фильтр в ExamineDirectory() который отфильтрует также папки не соответствующие ему.
PureBasic
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Procedure FileListToArrayRecursive(directory.s, Array files.s(1), pattern.s = "", flags = 0)
  ; Проверяем, существует ли директория
  If Not ExamineDirectory(0, directory, "*.*")
    Debug "Ошибка: Директория не существует или не может быть открыта: " + directory
    ReDim files(0) ; Возвращаем пустой массив
    ProcedureReturn 0
  EndIf
  
  pattern = LCase(pattern)
  Count = CountString(pattern, "|")+1
 
  ; Перебираем элементы директории
  While NextDirectoryEntry(0)
    ; Получаем имя элемента
    name.s = DirectoryEntryName(0)
 
    ; Игнорируем специальные директории "." и ".."
    If name = "." Or name = ".."
      Continue
    EndIf
 
    ; Полный путь к элементу
    fullPath.s = directory + "\" + name
 
    ; Проверяем, является ли элемент подкаталогом
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      ; Рекурсивно обходим подкаталог
      FileListToArrayRecursive(fullPath, files(), pattern, flags)
    EndIf
 
    ; Проверяем флаги
    If flags = 0 Or (flags = 1 And DirectoryEntryType(0) = #PB_DirectoryEntry_File) Or (flags = 2 And DirectoryEntryType(0) = #PB_DirectoryEntry_Directory)
      ext.s = LCase(GetExtensionPart(Name))
      For i=1 To Count
        If pattern = "" Or StringField(pattern, i, "|") = ext
          ; Добавляем элемент в массив
          index = ArraySize(files())
          ReDim files(index + 1)
          files(index) = fullPath
          Break
        EndIf
      Next
    EndIf
  Wend
 
  ; Возвращаем количество найденных элементов
  ProcedureReturn ArraySize(files())
EndProcedure
 
; Пример использования
Dim files.s(0) ; Создаем пустой массив
count = FileListToArrayRecursive("C:\Тест", files(), "txt|png", 1) ; Ищем все файлы txt и png
If count > 0
  Debug "Найдено файлов: " + Str(count)
  For i = 0 To count - 1
    Debug "Файл: " + files(i)
  Next
Else
  Debug "Файлы не найдены."
EndIf
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
16.03.2025, 23:23
winkot, в русской справке в дополнительном разделе где выложены функции пользователей есть десяток рабочих вариантов с разными концепциями, рекурсивный, не рекурсивный, с поддержкой регулярных выражений в маске, на основе вывода "cmd Dir", с флагом вложенности, древовидная структура. Ну а некоторые ещё и повторяются от разных пользователей.
0
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
17.03.2025, 09:15  [ТС]
Цитата Сообщение от AZJIO Посмотреть сообщение
в русской справке в дополнительном разделе
Где ее найти?
0
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
17.03.2025, 19:11  [ТС]
папки и файлы с кириллицей не находит
PureBasic
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Procedure FileListToArrayRecursive(directory.s, Array files.s(1), pattern.s = "", flags = 0)
  ; Проверяем, существует ли директория
  If Not ExamineDirectory(0, directory, "*.*")
    Debug "Ошибка: Директория не существует или не может быть открыта: " + directory
    ReDim files(0) ; Возвращаем пустой массив
    ProcedureReturn 0
  EndIf
  
  pattern = LCase(pattern)
  Count = CountString(pattern, "|")+1
 
  ; Перебираем элементы директории
  While NextDirectoryEntry(0)
    ; Получаем имя элемента
    name.s = DirectoryEntryName(0)
 
    ; Игнорируем специальные директории "." и ".."
    If name = "." Or name = ".."
      Continue
    EndIf
 
    ; Полный путь к элементу
    fullPath.s = directory + "\" + name
 
    ; Проверяем, является ли элемент подкаталогом
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      ; Рекурсивно обходим подкаталог
      FileListToArrayRecursive(fullPath, files(), pattern, flags)
    EndIf
 
    ; Проверяем флаги
    If flags = 0 Or (flags = 1 And DirectoryEntryType(0) = #PB_DirectoryEntry_File) Or (flags = 2 And DirectoryEntryType(0) = #PB_DirectoryEntry_Directory)
      ext.s = LCase(GetExtensionPart(Name))
      For i=1 To Count
        If pattern = "" Or StringField(pattern, i, "|") = ext
          ; Добавляем элемент в массив
          index = ArraySize(files())
          ReDim files(index + 1)
          files(index) = fullPath
          Break
        EndIf
      Next
    EndIf
  Wend
 
  ; Возвращаем количество найденных элементов
  ProcedureReturn ArraySize(files())
EndProcedure
 
; Пример использования
Dim files.s(0) ; Создаем пустой массив
count = FileListToArrayRecursive("C:\Тест", files(), "txt|png", 1) ; Ищем все файлы txt и png
If count > 0
  Debug "Найдено файлов: " + Str(count)
  For i = 0 To count - 1
    Debug "Файл: " + files(i)
  Next
Else
  Debug "Файлы не найдены."
EndIf
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 185
Записей в блоге: 1
17.03.2025, 19:36
Цитата Сообщение от winkot Посмотреть сообщение
Где ее найти?
В архиве русской справки. Тут запрещено давать ссылки на форумы, и на файлы. А приатачивать временный файл, коих потом расплодится больше десятка и все они будут старьё не имеет смысла. Так что лучше нагуглить источник с мартовской сборки справки.

1. Возможно маска *.* требует расширения файла, имя с точкой, а в папках обычно нет точки.
2. ReDim работает медленно, если число больше 1000, то есть для 10 000 это уже будет тормоз. Для таких конструкций создаётся массив например для 200 элементов и каждый раз увеличивается в 2 раза, если недостаточно велик, а по выходу обрезается до существующего.
1
Эксперт по электронике
6800 / 3227 / 335
Регистрация: 28.10.2011
Сообщений: 12,595
Записей в блоге: 7
18.03.2025, 02:48
Цитата Сообщение от winkot Посмотреть сообщение
папки и файлы с кириллицей не находит
Находит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2025, 02:48
Помогаю со студенческими работами здесь

Осуществить в папке поиск файлов, имена которых содержат название фирмы, и скопировать определенные их строки
На словах вроде просто звучит цель задачи, но много не понимаю как сделать. Задача простая : пройтись по файлам находящиеся в папке ,...

Изменить название файлов загруженных из папки
Есть у меня макрос который меняет названия, с расширением txt все гладко, а вот с pdf не работает Option Explicit Sub...

Получить список названий папок, находящихся в папках, которые находятся в одной папке
Простите за сумбур. Голова - как чугунный котел без костра. Гудит но не варит. Нужно собрать названия папок, которые находятся в папках,...

Как узнать имя и путь всех файлов и подпапок находящихся в папке?
Подсажите как можно узнать имя и путь всех файлов и подпапок находящихся в папке.

Создать список файлов, находящихся в папке (Word)
Добрый вечер, форумчане. Возникла задача, решить не получается сколько ни мучаюсь:( Необходимо создать в Ворде макрос, чтобы при его вызове...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru