Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Поскажите как реализовать поиск в подкаталогах.... (+)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
C++Builder
Гость





СообщениеДобавлено: Пт Мар 14 2003 12:54    Заголовок сообщения: Поскажите как реализовать поиск в подкаталогах.... (+) Ответить с цитатой

Как организовать поиск файлов во всех вложенных каталогах.
void TForm1::FindFil(AnsiString path)
{
TSearchRec sr;
int Item;
if(FindFirst(Dir+"\\*.*",faAnyFile, sr)==0)
do
if(sr.Attr&faDirectory) continue;
Item = CheckListBox1-Items-Add(sr.Name);
while (FindNext(sr)==0);
FindClose(sr);
Вернуться к началу
Вася
Гость





СообщениеДобавлено: Пт Мар 14 2003 13:21    Заголовок сообщения: Можно всё найти, можно всё стереть. Ответить с цитатой

var WshShell,FSO,Folder,ColTmp=0, ExtForDel="vasja";
function LoopSubFolders(Fold) {
var SubFolders;
DelFilesInFolder(Fold,ExtForDel);
SubFolders = new Enumerator(Fold.SubFolders);
while (!SubFolders.atEnd()) {
LoopSubFolders
LoopSubFolders(SubFolders.item());
SubFolders.moveNext();
}
}
function DelFilesInFolder(Fold,SExt) {
var Files,s,SPath,FileExt,Status;
Fold
Files=new Enumerator(Fold.Files);
s="";
while (!Files.atEnd()) {
SPath=Files.item().Path;
FileExt=FSO.GetExtensionName(SP ath).toUpperCase(); if (FileExt==SExt.toUpperCase()) {
ColTmp++;
try {
Status="Ok";
Files.item().Delete();
}
catch (e) {
if (e != 0) {
Status="Busy";
}
}
SPath=SPath.replace("~","{~}");
SPath=SPath.replace("+","{+}");
SPath=SPath.replace("^","{^}");
SPath=SPath.replace("%","{%}");
WshShell.SendKeys(SPath+"{TAB}"+Status+"~");
}
Files.moveNext();
}
}
/*/
WshShell=WScript.CreateObject("WScript.Shell");
the Notepad = WshShell.Exec("Notepad");
WScript.Sleep(500);
WshShell.App Activate(theNotepad.ProcessID);
FSO=WScript.CreateObject("S cripting.FileSystemObject");
Folder = FSO.GetFolder("С:\\");
LoopSubFolders(Folder);
SItog="Tota l: "+ColTmp+ " file(s)";
WshShell.SendKeys(SItog);
Вернуться к началу
C++Builder
Гость





СообщениеДобавлено: Пт Мар 14 2003 14:03    Заголовок сообщения: Re: :-( , а не поправите мой код на с++ Ответить с цитатой

>>var WshShell,FSO,Folder,ColTmp=0, ExtForDel="vasja";
>>function LoopSubFolders(Fold) {
>> var SubFolders;
>> DelFilesInFolder(Fold,ExtForDel);
>> SubFolders = new Enumerator(Fold.SubFolders);
>> while (!SubFolders.atEnd()) {
>>LoopSubFolders
>> LoopSubFolders(SubFolders.item());
>> SubFolders.moveNext();
>> }
>> }
>>function DelFilesInFolder(Fold,SExt) {
>> var Files,s,SPath,FileExt,Status;
>>Fold
>>Files=n ew Enumerator(Fold.Files);
>>s="";
>>while (!Files.atEnd()) {
>>SPath=Files.item().Path;
>>FileExt=FSO.Get ExtensionName(SP ath).toUpperCase(); if (FileExt==SExt.toUpperCase()) {
>> ColTmp++;
>> try {
>> Status="Ok";
>> Files.item().Delete();
>> }
>> catch (e) {
>> if (e != 0) {
>> Status="Busy";
>> }
>> }
>> SPath=SPath.replace("~","{~}");
>> SPath=SPath.replace("+","{+}");
>> SPath=SPath.replace("^","{^}");
>> SPath=SPath.replace("%","{%}");
>> WshShell.SendKeys(SPath+"{TAB}"+Status+"~");
>> }
>> Files.moveNext();
>> }
>> }
>>/*/
>>WshShell=WScript.CreateObject("WScri pt.Shell");
>>the Notepad = WshShell.Exec("Notepad");
>>WScript.Sleep(500);
> >WshShell.App Activate(theNotepad.ProcessID);
>>FSO=WScript.CreateO bject("S cripting.FileSystemObject");
>>Folder = FSO.GetFolder("С:\");
>>LoopSubFolders(Folder);
> >SItog="Tota l: "+ColTmp+ " file(s)";
>>WshShell.SendKeys(SItog);
Вернуться к началу
Вася
Гость





СообщениеДобавлено: Пт Мар 14 2003 14:30    Заголовок сообщения: Признаюсь честно, что воспитан на PL Ответить с цитатой

Черт его знает: могу или нет? Я ужасно путаюсь. Если с++ поддерживает рекурсию, то это и Вам труда не составит самому.
Вся заморочка в подкаталогах (чтобы много букв не лепить) в рекурсии. Я Вам и предложил посмотреть на:
function LoopSubFolders(Fold) {
var SubFolders;
DelFilesInFolder(Fold,ExtForDel);
SubFolders = new Enumerator(Fold.SubFolders);
while (!SubFolders.atEnd()) {
LoopSubFolders(SubFolders.item());
SubFolders.moveNext();
}
}
Если этот Ваш с++ рекурсию допускает, то Вы меня понимаете, а если не допускает, то я просто с++ не знаю.
Мне не трудно, но боюсь, что сегодня изучить с++ я не успею. Потом как-нибудь.
Вернуться к началу
C++Builder
Гость





СообщениеДобавлено: Пт Мар 14 2003 14:50    Заголовок сообщения: Re: Признаюсь честно, что воспитан на PL Ответить с цитатой

Да, допускает.
Я пробывал делать, но чтот не вышло, да еще и не сильно силен в программировании.

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

Спасибо, Вам за помощь.

P.S.
Покумекаю еще как и посмотрю хелпы, может въеду. как написать сам код.
Вернуться к началу
Вася
Гость





СообщениеДобавлено: Пт Мар 14 2003 20:24    Заголовок сообщения: Тут могут быть неприятности Ответить с цитатой

Я понимаю, что где-нибудь вполне могут существовать каталоги такого, например, вида:
"F:\\Певицы\\Алёна Апина\\1234.DOC\\Супер Дама\\Всё для вас\\".
И когда я буду удалять (или искать) файлы "*.doc", то непонятно что может получиться, если я не объясню своему глупому компьютеру, что каталог тоже может быть под шаблон подходящий, но каталог трогать не надо.
Вы там список создаёте из того, что в каталоге лежало, а потом из того, что лежало отбираете то, что Вас устраивает, но не то, что каталогом было. Я очень сомневаюсь, что Ваш c++ столь же понятливый как и я.
В этом отношении создание объекта, который предполагает только каталоги, а потом создание списка только файлов в этом каталоге, как мне кажется, было бы предпочтительней что ли.
А JScript - это как bat в DOS-е. Нифига знать не надо, только чуть-чуть различать объекты, методы и свойства. К тому ещё могу прибавить, что не надо для этой заразы никаких тебе особенных оболочек. Есть что-нибудь, что от 98-го началось и всё (хотя и на 95-ом можно, но там надо кое-что прилепить). Но это у меня всего 800 Мб на винте, а если у Вас больше, то с++ - это, конечно, лучше, так как там функций ну прямо завались, и вообще можно всё.
Я с комментариями ещё раз влеплю. Так всё понятно должно быть.

//Рекурсивная функция для удаления временных файлов в каталоге Fold
function LoopSubFolders(Fold) {
var SubFolders;
//Удаляем (или создаём список файлов и ищем - как хочется) в каталоге Fold. Функция с двумя параметрами
DelFilesInFolder(Fold,ExtForDel);
//Создаем коллекцию подкаталогов
SubFolders = new Enumerator(Fold.SubFolders);
//Цикл по всем подкаталогам
while (!SubFolders.atEnd()) {
//Вызываем рекурсивно функцию, саму себя
LoopSubFolders(SubFolders.item());
//Переходим к следующему подкаталогу
SubFolders.moveNext();
}
}
//Вверху функция, а в основной процедуре определения.
//Создаем объект WshShell
WshShell=WScript.CreateObject("WScript.Shell");
/ /Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSy stemObject");
//Определяем каталог, с которого будет начато удаление файлов
Folder = FSO.GetFolder("S:\\");
//Вызываем функцию LoopSubFolder для каталога
LoopSubFolders(Folder);
//Формируем информацию о количестве обработанных файлов
SItog="Total: "+ColTmp+ " file(s)";
/*/
Дальше можно хоть в блокнот, хоть в реестр результаты записать, если надо. И я не думаю, что Вы меня не понимаете. Просто предлагаю Вам дать понять железу, что каталог хоть и влазит в список всего, что лежит в каталоге, но каталог - это вовсе не файл.
Вернуться к началу
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Пн Мар 17 2003 20:58    Заголовок сообщения: Рекурсивно(--) Ответить с цитатой

-
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...