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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 18:35   #1
Lancer
 
Аватар для Lancer
 
Регистрация: 08.04.2009
Сообщений: 5
Вопрос Проблема. Поиск папок и файлов. Delphi7

Код:
procedure ScanDir(StartDir: string; Mask: string ; List: TStrings);
var
  SearchRec: TSearchRec;
  t:string;
begin
  if Mask = '' then
    Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
    Showmessage(inttostr(length(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;
проблема такая, я в программе указываю путь к папке, программа сканирует эту папку, НО, если путь к нужной папке в ос состоит из <32 символов то все замечательно, все находит. Если же путь >32 то ничего не хочет искать... Почему? При пошаговой проверке показывает что FindFirst(StartDir + Mask, faAnyFile, SearchRec)=0, тоесть Должен начинаться цикл но нет, он переходит к концу процедуры как будто условие не выполнилось... Причем, раньше, программа работала с куда более длинным путем... После пары вылетов изза ошибок работы с базой начались вышесказанные проблемы(в программе идет добавление из указанной папки информации о файлах в этой папке в базу) , тоесть когда длинный путь не хочет работать... Может эти ошибки с базой както повлияли? Может изза них теперь путь не должен быть длинным? Помогите пожалуйста разобраться, я не пойму в чем дело...
меня постоянно преследуют умные мысли... Но йа бистрее
Lancer вне форума Ответить с цитированием
Старый 09.04.2009, 19:35   #2
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

а поиском не судьба воспользоваться7
http://programmersforum.ru/showthrea...ght=TSearchRec
это обсуждалось ни один раз
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 09.04.2009, 20:51   #3
Lancer
 
Аватар для Lancer
 
Регистрация: 08.04.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от KORN Посмотреть сообщение
а поиском не судьба воспользоваться7
http://programmersforum.ru/showthrea...ght=TSearchRec
это обсуждалось ни один раз
спасибо конечно за подсказку, но у меня несколько иная проблема. Моя процедура(точнее взята у Михалыча) по сути делает тоже самое что и твоя. Мне просто интересно почему она в определенный момент перестала работать... Я думал я понятно изложил проблему... Повторюсь еще раз, Раньше эта проц работало хорошо. А теперь она не хочет работать именно с папками у которых путь состоит из большого кол-ва символов. Подскажи в каком направлении копать, где искать информацию о длинне пути или еще что...
меня постоянно преследуют умные мысли... Но йа бистрее
Lancer вне форума Ответить с цитированием
Старый 09.04.2009, 21:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

то, что вы привели тут, даже не компилируется!
после расстановки операторных скобок - всё работает.
длина каталога более 32 всё в порядке.

вот код:
Код:
procedure TForm1.ScanDir(StartDir, Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
  t:string;
begin
  if Length(Trim(StartDir))=0 then Exit;
  if Mask = '' then Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
    Showmessage(inttostr(length(StartDir)));// смотрю из скольки символов состоит путь к папке
  if FindFirst(StartDir + Mask, faAnyFile, SearchRec)=0 then
  begin
    repeat
      Application.ProcessMessages;
      if (SearchRec.Attr and faDirectory) <> faDirectory then
          Memo1.Lines.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;
p.s. вместо Вашего TSTringList я для отладки использовал Memo - но это Вы и сами разберётесь...

p.p.s. рабочий пример + исходники на Delphi выложил. можете потестировать..
Вложения
Тип файла: rar ScanDir.rar (142.2 Кб, 301 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск файлов и папок FAiver Общие вопросы Delphi 13 09.04.2009 18:01
Получить список файлов и папок. gusluk Общие вопросы Delphi 3 10.03.2009 12:49
Отображение скрытых файлов и папок и отображение розширения всех файлов beegl Общие вопросы Delphi 10 14.12.2008 22:02
Поиск папок Artificial Помощь студентам 2 16.03.2008 22:30
поиск Папок Dukalis Общие вопросы C/C++ 3 17.01.2008 20:22