Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.01.2010, 22:38
Argument Argument вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 7
Репутация: 10
По умолчанию Исключение при использовании исходника с этого сайта

Скопировал код отсюда: http://delphisources.ru/pages/faq/ba...lude_dirs.html (получить список подкаталогов в папке)

Происходит Read Access Violation при вызове процедуры InsDirs. Причем происходит сразу после вызова, т.е. после выполнения строки
InsDirs(root + '\', OutPaper.Count, Root, OutPaper);

Я перемещал описание этой процедуры перед GetTreeDirs, как и положено, но не помогло.

В чем проблема?
Ответить с цитированием
  #2  
Старый 22.01.2010, 22:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,053
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще, такая ошибка обычно происходит при обращении к несуществующему объекту или в облась защищенной памяти.

Подозреваю, что у вас просто не создан объект Strs (см в примере использования).
Ответить с цитированием
  #3  
Старый 23.01.2010, 19:39
Argument Argument вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 7
Репутация: 10
По умолчанию

Действительно, забыл создать объект. Но теперь другая проблема - процедура возвращает пустую Strs, хотя подкаталоги есть.
Ответить с цитированием
  #4  
Старый 23.01.2010, 20:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,053
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, скорее всего, опять что-то не так сделал.
Хотя, ИМХО, приведенный код слишком сложный. Можно и короче написать.
Ответить с цитированием
  #5  
Старый 23.01.2010, 23:31
Argument Argument вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 7
Репутация: 10
По умолчанию

Для этой процедуры нужен модуль UDBF.FillTreeViewWithFiles, подключит его не удается и непонятно откуда его брать.

На сайте есть еще один исходник http://www.delphisources.ru/pages/fa...t_subdirs.html
Но там есть неизвестная функция AddDirSeparator, которая нигде не описана. Видимо тоже нужен какой то модуль...
Ответить с цитированием
  #6  
Старый 24.01.2010, 00:21
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,053
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Госпадя!!!

Код:
procedure GetDirsList(root : String; var list : TStringList);
var
  i : Integer;
  F : TSearchRec;
begin
  list.add(root);
  i := FindFirst(IncludeTrailingPathDelimeiter(root) + '*.*',faAnyFile,F);
  While i = 0 Do
    Begin
      If ((F.Attr And fadirectory) <> 0) And (F.Name <> '.') And (F.Name <> '..') 
       Then GetDirsList(IncludeTrailingPathDelimeiter(root) + F.Name,list);
      i := FindNext(F);
    End;
  FindClose(F);
end;

Все. При вызове вернет тебе в списке все папки.
Ответить с цитированием
  #7  
Старый 24.01.2010, 09:54
Argument Argument вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 7
Репутация: 10
По умолчанию

За код, конечно, спасибо, но не работает. list.add(root) не добавляет ничего в список.
Ответить с цитированием
  #8  
Старый 24.01.2010, 14:41
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А у вас какая ОС ?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 24.01.2010, 16:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,053
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Argument
За код, конечно, спасибо, но не работает. list.add(root) не добавляет ничего в список.

А вот ненадо!!!
Все работает!!!

Еще раз код с примером:
Код:
procedure GetDirsList(root : String; var list : TStringList);
var
  i : Integer;
  F : TSearchRec;
begin
  list.add(root);
  i := FindFirst(IncludeTrailingPathDelimiter(root) + '*.*',faAnyFile,F);
  While i = 0 Do
    Begin
      If ((F.Attr And fadirectory) <> 0) And (F.Name <> '.') And (F.Name <> '..')
       Then GetDirsList(IncludeTrailingPathDelimiter(root) + F.Name,list);
      i := FindNext(F);
    End;
  FindClose(F);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  S : TStringList;
begin
  S := TStringList.Create;
  GetDirsList('d:',S);
  memo1.Lines.Assign(S);
  S.Free;
end;
Ответить с цитированием
  #10  
Старый 24.01.2010, 21:44
Argument Argument вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 7
Репутация: 10
По умолчанию

Сорри, действительно работает. Просто впервые столкнулся с листами, не разобрался еще.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter