Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2016, 12:04   #1
Tw1X
 
Регистрация: 05.04.2011
Сообщений: 8
По умолчанию Поиск папок по сети

Всем доброго дня, нужна помощь разобраться с функциями поиска.
Необходимо найти по имени папки расположение этой папки в сети.
т.е. в поиске вводим папку "rv" он должен найти все папки rv в сети и вывести
"\\1-pl\rv"
"\\2-pl\tmi\rv" и т.д.
найти папку и показать путь его сетевого расположения.

не список фалов в папке нужно вывести, а именно путь к сетевому расположению папки.

Для поиска файлов(не папок!) я нашел код:

Код:
procedure NetworkScan(AFiles : TStrings);
 
  procedure ScanDir(ADir:string);
  var sr:_WIN32_FIND_DATA; fh:THandle; sn:string;
  begin
    fh:=FindFirstFile(PChar(ADir+'*'),sr);
    if fh<>INVALID_HANDLE_VALUE then begin
      repeat
        sn := sr.cFileName;
        if (sn<>'.')and(sn<>'..')and(sn<>'') then begin
          if (sr.dwFileAttributes and faDirectory)<>0
            then ScanDir(ADir+sn+'\')
            else if sn=Form1.edt1.text then
            AFiles.Add(ADir);
          Application.ProcessMessages;
        end;
      until not FindNextFile(fh,sr);
    end;
    Windows.FindClose(fh);
  end;
 
  procedure EnumNet(NetRes:PNetResource);
  var i,res,Handle,count,bufsize:cardinal;
      pr:PNetResource;
      buf:array of byte;
  begin
    bufsize:=16384;
    SetLength(buf,bufsize);
    count:=$FFFFFFFF;
    res := WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,0,NetRes,Handle);
    if res=NO_ERROR then begin
      repeat
        res:=WNetEnumResource(Handle,count,@buf[0],bufsize);
        if res=NO_ERROR then begin
          pr:=@buf[0];
          for i:=0 to count-1 do begin
            if (pr.dwUsage and RESOURCEUSAGE_CONTAINER)<>0
              then EnumNet(pr);
            if (pr.dwUsage and RESOURCEUSAGE_CONNECTABLE)<>0
              then ScanDir(pr.lpRemoteName+'\');
            inc(pr);
          end;
        end;
      until (res<>NO_ERROR);
      WNetCloseEnum(Handle);
    end;
  end;
 
begin
  EnumNet(nil);
end;
ищет файлы без проблем, нужно чтоб выводило папки, пытался изменить...

Код:
procedure ScanDir(ADir:string);
  var sr:tsearchres; fh:THandle; sn:string;
  begin
    fh:=FindFirst(adir,fadirectory,sr);
    if fh<>INVALID_HANDLE_VALUE then begin
      repeat
        sn := sr.name;
        if (sn<>'.')and(sn<>'..')and(sn<>'') then begin
          if (sr.Attr and faDirectory)=sr.attr
            then ScanDir(ADir+sn+'\')
            else if sn=Form1.edt1.text then
            AFiles.Add(ADir);
          Application.ProcessMessages;
        end;
      until FindNext(sr)<>0;
    end;
    Windows.FindClose(fh);
  end;
в чем ошибка?
Tw1X вне форума Ответить с цитированием
Старый 30.04.2016, 15:11   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

обычно, такие вопросы задают после того, как отладчик не помог.
Отладчик не помог?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 30.04.2016, 17:23   #3
Tw1X
 
Регистрация: 05.04.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
обычно, такие вопросы задают после того, как отладчик не помог.
Отладчик не помог?
нет( и гугл не помог.
Tw1X вне форума Ответить с цитированием
Старый 30.04.2016, 17:27   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

показывай.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 30.04.2016, 20:42   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
       if (sn<>'.')and(sn<>'..')and(sn<>'') then begin
          if (sr.dwFileAttributes and faDirectory)<>0
            then ScanDir(ADir+sn+'\')
Код:
        if (sn<>'.')and(sn<>'..')and(sn<>'') then begin
          if (sr.Attr and faDirectory)=sr.attr
            then ScanDir(ADir+sn+'\')
если что-то <>0, то это вовсе не значит что это =sr.attr

http://programmersforum.ru/showthread.php?t=292744
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.04.2016 в 20:47.
evg_m вне форума Ответить с цитированием
Старый 30.04.2016, 20:51   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
если что-то <>0, то это вовсе не значит что это =sr.attr
в данном случае проверяется единичный бит (атрибут каталога) в маске, та что пофиг.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 30.04.2016, 22:41   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
та что пофиг.
(sr.Attr and faDirectory)=sr.attr
48 and 16 = 48 ??????
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.04.2016, 23:18   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
48 and 16 = 48 ??????
48 and 16 <> 0
т. е. sr.Attr содержит бит атрибута каталога.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.05.2016, 07:29   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

так и речь была о о том, что НЕЛЬЗЯ сравнивать ОДИН бит (48 and 16) со ВСЕМ блоком атрибутов.
что нельзя использовать ВТОРОЙ код (являющийся цитатой из НЕРАБОТАЮЩЕГО кода ТС). А первый код тоже цитата из ТС (код указанный как первоисточник(основа) для написания ).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 01.05.2016, 09:02   #10
Tw1X
 
Регистрация: 05.04.2011
Сообщений: 8
По умолчанию

http://www.delphi-manual.ru/search-f...hp?sample=view
пользовался этим мануалом. там было условие
if (F.Attr and faDyrectory)=F.Attr
then S:='Это каталог';
Tw1X вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсивный поиск папок FindFirst Lehanidze Помощь студентам 4 06.08.2009 13:13
Проблема. Поиск папок и файлов. Delphi7 Lancer Помощь студентам 3 09.04.2009 21:21
поиск файлов и папок FAiver Общие вопросы Delphi 13 09.04.2009 18:01
Поиск папок Artificial Помощь студентам 2 16.03.2008 22:30
поиск Папок Dukalis Общие вопросы C/C++ 3 17.01.2008 20:22