Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск файлов из Dll 
:(
    Опции темы
Rohoss
Дата 18.3.2008, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



Когда процедура 
Код

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\". Системе не удается найти указанный путь.

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

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



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Akella
Дата 18.3.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



для начала замени
Код

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;


PM MAIL   Вверх
Rohoss
Дата 18.3.2008, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



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

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



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
bems
Дата 20.3.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



с передачей строк в dll (sharemem и тд) ошибок нет?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Rohoss
Дата 22.3.2008, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



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

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


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.