for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Re: Поиск папок и файлов по шаблону
of63

Сообщений: 11498
Откуда: Н.Новгород
Дата: 31.05.18 19:54:17ОтветитьЦитировать
например?
Ratings: 0 negative/0 positive

Re: Поиск папок и файлов по шаблону
AndyNigmatec

Сообщений: 820
Откуда: Волгоград
Дата: 31.05.18 20:17:55ОтветитьЦитировать
например задал обход папки 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



Исправлено: AndyNigmatec, 31.05.18 20:20
Ratings: 0 negative/0 positive


Вложения:
[Безымянный.png (8.1KB)]  

Re: Поиск папок и файлов по шаблону
of63

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

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

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



Исправлено: of63, 31.05.18 20:30
Ratings: 0 negative/0 positive

Re: Поиск папок и файлов по шаблону
AndyNigmatec

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

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


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



Исправлено: AndyNigmatec, 31.05.18 20:33
Ratings: 0 negative/0 positive

Re: Поиск папок и файлов по шаблону
of63

Сообщений: 11498
Откуда: Н.Новгород
Дата: 31.05.18 20:32:51ОтветитьЦитировать
Заметь (не я это предложил), что STN DEFAULT для фокса - это как рабочий каталог, который вы/мы к лабельке приделываем. Ек все прогеры заморачиваются ф-ией SYS(16 (местонахождение файлва EXE)
Ratings: 0 negative/0 positive

Re: Поиск папок и файлов по шаблону
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Поиск папок и файлов по шаблону
of63

Сообщений: 11498
Откуда: Н.Новгород
Дата: 31.05.18 21:30:20ОтветитьЦитировать
ADIR папок без доступа "Листинг" не видит, и боаузер (рабочий стол винды) тоже. И это естественно.
Ratings: 0 negative/0 positive

Re: Поиск папок и файлов по шаблону
AndyNigmatec

Сообщений: 820
Откуда: Волгоград
Дата: 31.05.18 21:44:17ОтветитьЦитировать
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

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

Re: Поиск папок и файлов по шаблону
akvvohinc

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

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

Re: Поиск папок и файлов по шаблону
of63

Сообщений: 11498
Откуда: Н.Новгород
Дата: 01.06.18 02:51:44ОтветитьЦитировать
Типа да )
Ratings: 0 negative/0 positive

Re: Поиск папок и файлов по шаблону
ry

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

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

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

Re: Поиск папок и файлов по шаблону
Igor Korolyov

Сообщений: 31838
Дата: 01.06.18 13:52:45ОтветитьЦитировать
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

Сообщений: 31838
Дата: 01.06.18 13:58:42ОтветитьЦитировать
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

Сообщений: 820
Откуда: Волгоград
Дата: 01.06.18 17:43:26ОтветитьЦитировать
Для ТС: вот, чутка облагородил выложенный ранее код, повыкидывал совсем уж лишнее )))
Ratings: 0 negative/0 positive


Вложения:
[dirinfo.zip (1.9KB)]  

Re: Поиск папок и файлов по шаблону
akvvohinc

Сообщений: 2790
Откуда: Москва
Дата: 01.06.18 19:32:24ОтветитьЦитировать
Igor Korolyov
Для получения списка файлов никакие SET DEFAULT не требуются.
Думаю, что я знаю, зачем там SET DEFAULT.

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

Re: Поиск папок и файлов по шаблону
Crispy

Сообщений: 13003
Дата: 04.06.18 11:05:31ОтветитьЦитировать
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

Сообщений: 82
Дата: 04.06.18 12:55:14ОтветитьЦитировать
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

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



Исправлено: ABB, 06.06.18 20:15
Ratings: 0 negative/0 positive


Вложения:
[dirsubs.zip (2.8KB)]  



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

On-line: 57 Simple777  and Guests: 56


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