Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Поиск файлов из Dll


Автор: Rohoss 18.3.2008, 01:04
Когда процедура 
Код

procedure ScanDir(StartDir: string; Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
begin
  if Mask = '' then
    Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  if FindFirst(StartDir + Mask, faAnyFile, SearchRec) = 0 then
  begin
    repeat Application.ProcessMessages;
      if (SearchRec.Attr and faDirectory) <> faDirectory then
        List.Add(StartDir + SearchRec.Name)
      else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')then begin
        List.Add(StartDir + SearchRec.Name + '\');
      ScanDir(StartDir + SearchRec.Name + '\', Mask, List);
  end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;


находится в .ехе файле, поиск файлов происходит нормально, если же её вызываю из .dll, появляется вот такое сообщение 

Cannot open file "C:\ATI\". Системе не удается найти указанный путь.

то есть может искать только в корневой папке, и не заходит во внутренние…

Подскажите плз, что делать???

Автор: Akella 18.3.2008, 01:28
для начала замени
Код

if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';


на

Код

StartDir := IncludeTrailingPathDelimiter(StartDir);


т.е. не используй прямой вызов слеша

Добавлено через 2 минуты и 53 секунды
вместо \ используй pathdelimiter

Добавлено через 4 минуты и 10 секунд
странноватая функция, попробуй переделать с этой:

Код

Procedure TfmUpdateInfo.GetFileToUpload(Dir:String);
Var
 SearchRec:TSearchRec;
begin
 try
   LogUpdate('Сбор информации на отправку...');
   if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir);
   if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
     repeat
       if (SearchRec.name='.') or (SearchRec.name='..') then continue;
       if ((SearchRec.Attr and faDirectory)<>0) then
         GetFileToUpload(Dir+SearchRec.name)
       else
        begin
          if AnsiUpperCase(ExtractFileExt(SearchRec.name)) <> '.RAR' then begin
            slArcFile.Add(Dir+SearchRec.name);
           if cboxDetailedLog.Checked then
             LogUpdate('Найден файл (для архивирования) для отправки в центр: '+Dir+SearchRec.name);
          end;

        end;//else
     until FindNext(SearchRec)<>0;

 finally
   FindClose(SearchRec);
 end;
end;


Автор: Rohoss 18.3.2008, 01:54
Akella твоя процедура работает, большое спасибо!!! 
Цитата(Akella @  18.3.2008,  01:28 Найти цитируемый пост)
т.е. не используй прямой вызов слеша

Всё же было бы очень интересно узнать почему? в ехе ведь работает…

Автор: bems 20.3.2008, 18:25
с передачей строк в dll (sharemem и тд) ошибок нет?

Автор: Rohoss 22.3.2008, 03:04
Цитата(bems @  20.3.2008,  18:25 Найти цитируемый пост)
с передачей строк в dll (sharemem и тд) ошибок нет?

А как узнать? Делфи никаких ошибок не выдаёт...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)