:: Visual Foxpro, Foxpro for DOS
Re: Поиск папок и файлов по шаблону
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
например?
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
например задал обход папки lcStartDir='C:\Users\'

и получил

[attachment 29477 ]

вынь7

глянул древний код - все-таки тогда поставил заглушку которая и кажет сие сообщение

&& добавим возможность продолжения обхода (пропуская папку с закрытым доступом)
&& или некорректным названием
lcTecDir0='"'+lcTecDir+'"'
TRY
SET DEFAULT TO (lcTecDir0)
CATCH
lcText='Нет доступа к папке: '+lcTecDir+'.'
lcStop=IIF(MESSAGEBOX('Нет доступа к папке: '+lcTecDir+'. Работа программы некорректна!'+CHR(13)+;
'Продолжить выполнение пропустив эту папку?',32+4,'Внимание!')=6,1,2)
ENDTRY



Исправлено 2 раз(а). Последнее : AndyNigmatec, 31.05.18 20:20
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
я не понял претензий к ADIR, ты поймался на операторе
SET DEFAULT TO (lcTecDir0)
это аналог оператора CD, это не ошибка в программе, а не правильное указание места (рабочего какталога) в файловой ОС

lcTecDir0='"'+lcTecDir+'"'
SET DEFAULT TO (lcTecDir0)

ЗАЧЕМ КАВЫЧКИ ? ладно бы макросом впендюрил этот ...Dir0...и то, ... наверное бы сьел фокс )



Исправлено 1 раз(а). Последнее : of63, 31.05.18 20:30
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
не помню уже нахрена там кавычки, но суть в том что set default посылался на то что "увидел" adir

ммм, а зачем там вообще set default ... тож не помню уже )))


счас бы вообще переписал бы втрое короче думаю ))) тока вот оно "не надо" сто лет как



Исправлено 3 раз(а). Последнее : AndyNigmatec, 31.05.18 20:33
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Заметь (не я это предложил), что STN DEFAULT для фокса - это как рабочий каталог, который вы/мы к лабельке приделываем. Ек все прогеры заморачиваются ф-ией SYS(16 (местонахождение файлва EXE)
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AndyNigmatec
в новомодных виндах adir таки полезет (увидит) папки читать которые не сможет (я про локальные) ...
И что? ADIR не выдаёт ошибок если нет доступа к папке, или если права запрещают её листинг (как для всяких Application Data которые в виде ссылок сделаны, ещё и с "циклами" внутри).
Впрочем, обработку ошибок никто не отменял


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
ADIR папок без доступа "Листинг" не видит, и боаузер (рабочий стол винды) тоже. И это естественно.
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
of63
ADIR папок без доступа "Листинг" не видит
как бе к примеру выше:

lcDir='C:\Users\All Users\Microsoft\WwanSvc\'
ADIR(a1,'*','AHRSD',1)
DISPLAY MEMORY LIKE a1

смотрим что "видит" ADIR в таком синтаксисе:

A1                                                  Pub                            A            
   (    1,    1)                                                                   C            "."
   (    1,    2)                                                                   N            0                                                  (              0.00000000)
   (    1,    3)                                                                   D            14.07.2009 
   (    1,    4)                                                                   C            " 9:32:40"
   (    1,    5)                                                                   C            "...HD"
   (    2,    1)                                                                   C            ".."
   (    2,    2)                                                                   N            0                                                  (              0.00000000)
   (    2,    3)                                                                   D            14.07.2009 
   (    2,    4)                                                                   C            " 9:32:40"
   (    2,    5)                                                                   C            "...HD"
   (    3,    1)                                                                   C            "Profiles"
   (    3,    2)                                                                   N            0                                                  (              0.00000000)
   (    3,    3)                                                                   D            14.07.2009 
   (    3,    4)                                                                   C            " 9:32:40"
   (    3,    5)                                                                   C            "...HD"

таки Profiles он видит )))

а при попытке установить SET DEFAULT на эту Profiles - получаем ошибку 202 - "Invalid path or file name."
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
хм... верю, но надо проверить. Я без шутки я об ADIR (древний фокс, он же сейчас SYS(2000)), что после покупки МС, они его сделают достаточно неглючным в винде. да он и не глючный...
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
of63
Ограничение на длину имени файла в винде раньше сработает (ок. 255 символов), если только не делать однобуквенных директориев 128 шт
Скорее не в винде, а в Фоксе.

В винде я не помню ограничения на глубину вложенности папок. Вопрос лишь в том, что далеко не каждая программа сможет работать с файлом на такой глубине.
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Типа да )
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
ry

Сообщений: 2113
Дата регистрации: 24.09.2007
akvvohinc
of63
Ограничение на длину имени файла в винде раньше сработает (ок. 255 символов), если только не делать однобуквенных директориев 128 шт
Скорее не в винде, а в Фоксе.

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

На глубину вложенности папок ограничения в NTFS вроде бы нет, да и на длину имени файла тоже ограничения немаленькие - длина имени файла ограничена 255 символами, а длина пути может быть до 32К. Но ведь при этом общую длину имени файла вместе с путем WinAPI ограничивает до 260 символов, из них 1 символ конца строки плюс 3 символа для обозначения диска (C:\) плюс разделители уровней каталогов. Так что получается, что именно ограничения Windows не позволяют нормально работать с файлами и папками определенного уровня вложенности. К таким файлам можно в теории получать доступ при помощи префикса \\?\, но на практике не все программы это умеют.
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ry
Но ведь при этом общую длину имени файла вместе с путем WinAPI ограничивает до 260 символов, из них 1 символ конца строки плюс 3 символа для обозначения диска (C:\) плюс разделители уровней каталогов.
Именно так - это касается ANSI версий функций (которыми, естественно, и пользуется неюникодный фокс), и "обычных" путей для юникодных версий этих же функций - т.е. путей НЕ начинающихся с \\?\ в т.ч. любых относительных путей (их нельзя задать в синтаксисе с \\?\)
ry
Так что получается, что именно ограничения Windows не позволяют нормально работать с файлами и папками определенного уровня вложенности
Для программ использующих *A версии винапи функций - т.е. неюникодных.
ry
К таким файлам можно в теории получать доступ при помощи префикса \\?\, но на практике не все программы это умеют.
"На практике" это умеют те программы, которые могут так или иначе использовать *W (юникодные) версии апи-функций. Даже фокс вполне может это делать - если самому явно задекларировать нужные функции, явно указав что используется их *W вариант, подготовить параметры в юникодном формате (а пути, соответственно, в юникодном виде плюс начинающиеся с "волшебных" символов \\?\) и работать

Тут всё вполне доступно изложено.
msdn.microsoft.com


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AndyNigmatec
таки Profiles он видит )))
а при попытке установить SET DEFAULT на эту Profiles - получаем ошибку 202 - "Invalid path or file name."
Кто говорил про SET DEFAULT? Это уж твои фантазии и ненужный код
Для получения списка файлов никакие SET DEFAULT не требуются. А ADIR(laFiles, 'C:\Users\All Users\Microsoft\WwanSvc\Profiles\*.*'...) вполне себе работает (и даже не 0 возвращает, т.к. это не настолько "специальная/закрытая" папка как те же "Application Data" в более свежих виндах, а 2 элемента . и ..)


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
Для ТС: вот, чутка облагородил выложенный ранее код, повыкидывал совсем уж лишнее )))
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Для получения списка файлов никакие SET DEFAULT не требуются.
Думаю, что я знаю, зачем там SET DEFAULT.

Когда-то давно, когда я экспериментировал с ADIR(), не особенно вдаваясь в теорию, я полагал, что смена текущей папки по CHDIR или через SET DEFAULT поможет работать с ADIR() на любой глубине, то есть по "короткому" относительному пути - но финт не прошел.
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
ry
[на длину имени файла тоже ограничения немаленькие - длина имени файла ограничена 255 символами, а длина пути может быть до 32К

Как-то несколько лет назад специально интересовался этим вопросом.
Поскольку периодически приходится сталкиваться с ограничением на сверхдлинные пути у различных пользователей. После прохождения предела длины пути файла + имя файла (куда включаются еще и буква диска и все слэши) - файл становится недоступным для почти всех программ.
При этом, на мой взгляд, несколько странно со стороны разработчиков было вообще позволять давать такие длинные имена. Скажем в офисе по умолчанию обычно предлагается в качестве имени документа - первое предложение из документа! Какой идиот это придумал, зная о таком затыке в винде?!
Причем эта "фича" никак не исправлена по умолчанию до сих пор - вплоть до Win10!
Единственное, что стало возможным, и то, только в версии про - вручную в реестр внести поправку, которая позволит иметь уже произвольную длину имен файлов:
В HKLM\SYSTEM\CurrentControlSet\Control\FileSystem - параметр LongPathsEnabled (тип: REG_DWORD) =1.
Но это только в десятке появилось.
Из практики же давно обнаружил, что ряд программ, таких как FAR и Total Commander, позволяют вполне себе нормально оперировать даже и с такими сверхдлинными путями.
Также у самой винды есть (слава богу!) еще и своя специфическая возможность - если кликать мышкой по сверхдлинному имени, можно таки его переименовать с укорачиванием. В противном случае было бы совсем хреново - каждый раз при проблемах сверхдлинных путей пользоваться сторонними файл-менеджерами.

PS.
Ну это все как бы живая, я бы сказал даже, животрепещущая практика. \m/
Что же касается теории - в принципе чуть выше у Игоря все похоже уже и было обрисовано, как говорится с жирной точкой.
Ну вот может еще ссылка (чисто в дополнение) как-то попадалась: habr.com


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
VeterVFP
Но как получить такой список, если в именах папок тоже есть маска?
Здесь говорили чисто о фоксовой реализации. На всякий случай напомню про внешний вариант. Куски комментариев самому себе:
* Есть VFP\Tools\Filer\Filer.dll - там хороший поиск, в том числе это
* Гибкий поиск через WMI (работает долго): www.script-coding.com
* всех папок на всех дисках, в название которых входит слово "Документы" с маленькой или с большой буквы
* colFolders = objService.ExecQuery("SELECT * FROM Win32_Directory WHERE FileName LIKE '%[Дд]окументы%'")

Ну и можно как-то так:
@echo off
rem где искать
set RootP=D:\VFP
rem маска имени папки - конкретное имя конкретной папки без вложений, то есть так не катит: ?oo*\bb*\
set DMask=?oo*
rem маска файла
set FMask=*.v?x
rem куда записать результат
set res=FindFiles.tmp
if exist %res% del %res%
for /d /r %RootP% %%I in (%DMask%) do call :FindFiles "%%I"
exit/b
:FindFiles
for /r %1 %%J in (%FMask%) do echo %%J>>%res%
выдаёт такое:
D:\VFP\Toolbox\_toolbox.vcx
D:\VFP\Tools\HexEdit\hexedit.vcx
D:\VFP\Tools\MSAA\highlight.vcx
D:\VFP\Tools\Test\aautils.vcx
D:\VFP\Wizards\Template\Books\Libs\books.vcx
D:\VFP\Wizards\Template\Books\Libs\путь Tools с пробелами\файл с пробелами.vcx
D:\VFP\Wizards\Template\Books\Libs\путь Tools с пробелами\файл с пробелами.vcx
при этом:
1) bat-ник и результат - cp866
2) результат надо обработать на задвоение. Оно получается в случае, когда вложенная папка тоже соответствует шаблону
Ratings: 0 negative/0 positive
Re: Поиск папок и файлов по шаблону
ABB
Автор

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Может быть не совсем в русле обсуждения, но похожие задачи решал с помощью Dirsubs.prg Chet Gardiner .
С созданной таблицей можно работать как угодно.



Исправлено 1 раз(а). Последнее : ABB, 06.06.18 20:15
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 24 kornienko_ru Guest (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика