Организация поиска в сетевой папке

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Организация поиска в сетевой папке

Сообщение jangle » 15.09.2009 (Вт) 16:42

Опять я с дурацким вопросом. Подскажите, как лучше организовать поиск каталога в сетевой папке чужого компа?
Допустим там лежат тысячи, даже десятки тысяч вложенных папок и файлов (в последстии их может быть сотни тысяч).
У меня есть список запросов из сотни названий например: Мост, Дорога, Вокзал и т.д.

Мне нужно просканировать всю сетевую папку и найти там близкие названия вложенных папок и вернуть к ним путь.

Допустим:

запрос [Мост] ответ [\\Server\Данные\Москва\Объекты\Мосты\Железнодорожный мост N15]

запрос [Вокзал] ответ [\\Server\Данные\Москва\Стратегические объекты\Вокзалы\Казанский вокзал]


Как лучше поступить, прочитать в память все это гигантское дерево каталогов, а потом искать в нем совпадения? Или же просто искать обычными файловыми фунциями? Нужно максимально ускорить поиск по сети.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Организация поиска в сетевой папке

Сообщение alibek » 15.09.2009 (Вт) 18:59

Если клиент-сервер, то ищешь на удаленном компе, возвращаешь совпадения.
Если клиент, то выгружаешь список файлов в текстовый файл (по расписанию или разово), после чего забираешь файл и ищешь в нем.
Насчет сотен тысяч ты обманываешь.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Организация поиска в сетевой папке

Сообщение Хакер » 15.09.2009 (Вт) 19:04

Какие ОС и ФС на этих компьютерах?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Организация поиска в сетевой папке

Сообщение jangle » 15.09.2009 (Вт) 21:13

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


Не обманываю, например у меня в папке Windows 24670 файлов и 2720 папок. А там папка объемом сотни гигабайт.
Файлы переодически изменяются, добовляются новые, переименовываются

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Организация поиска в сетевой папке

Сообщение jangle » 15.09.2009 (Вт) 21:15

Хакер писал(а):Какие ОС и ФС на этих компьютерах?


На сетевой папке Windows Server 2003 с NTFS

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Организация поиска в сетевой папке

Сообщение Antonariy » 16.09.2009 (Ср) 13:21

Нужно включить на сервере службу индексации (если выключена) и спрашивать у нее через, не поверишь, ADODB:
Код: Выделить всё
On Error Resume Next

Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = "provider=msidxs;"
objConnection.Properties("Data Source") = "Данные"
objConnection.Open

Set objCommand = CreateObject("ADODB.Command")

strQuery = "Select Filename from Scope()"

Set objRecordSet = objConnection.Execute(strQuery)

Do While Not objRecordSet.EOF
    Wscript.Echo objRecordSet("Filename")
    objRecordSet.MoveNext
Loop
Where, как понимаешь, тоже не возбраняется. Только сначала нужно создать каталог:
Код: Выделить всё
On Error Resume Next

Set objAdminIS = CreateObject("Microsoft.ISAdm")
objAdminIS.Stop()

Set objCatalog = objAdminIS.AddCatalog("Данные","c:\Данные")
objAdminIS.Start()

Запрос клиента к службе на сервере проще всего сделать через asp-скрипт.
Так же возможно проканает "provider=msidxs;server=ServerName", если права настроить.
Лучший способ понять что-то самому — объяснить это другому.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Организация поиска в сетевой папке

Сообщение awl100Alex » 17.09.2009 (Чт) 9:58

Ну и сколько часов будут индексироваться папки на сервере?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Организация поиска в сетевой папке

Сообщение Antonariy » 17.09.2009 (Чт) 10:21

Несколько минут. Эта операция одноразовая, потом сервер только правит индекс при изменении содержимого каталога.
Лучший способ понять что-то самому — объяснить это другому.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Организация поиска в сетевой папке

Сообщение awl100Alex » 17.09.2009 (Чт) 11:02

Хорошо, но вот странно: если эта индексация такая удобная и быстрая штука, почему же тогда Майкрософт эту службу во всех ОС отключили по умолчанию???

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Организация поиска в сетевой папке

Сообщение Antonariy » 17.09.2009 (Чт) 11:47

Потому что она не для чайников.
И потому что эта служба является главным пожирателем ресурсов. И тут уж автор пусть решает, что ему важнее — быстрый поиск или свободные ресурсы.

Вспомнил, что индексируются не только свойства файла, но и его содержимое, так что индексация действительно займет часы или даже дни. Не знаю, можно ли это изменить.
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Организация поиска в сетевой папке

Сообщение jangle » 18.09.2009 (Пт) 9:46

Проблема в том, что сервер мне недоступен, т.е. включить службу там не могу.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Организация поиска в сетевой папке

Сообщение Antonariy » 18.09.2009 (Пт) 11:39

Тогда действуй, как сказал alibek. Однако, если файлы изменяются часто и какой-то файл может понадобиться вкоре после добавления, то это не выход, нужно договариваться с админом.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing-бот и гости: 98

    TopList