Текущий архив: 2006.10.08;
Скачать: CL | DM;
ВнизIncludeTrailingBackslash Найти похожие ветки
← →
RomanH © (2006-09-22 12:11) [0]Мастера подскажите почему функция
IncludeTrailingBackslash
работает в WinXP SP1, а в WinXP SP2 не работает,
может существует универсальная функция подобнаяIncludeTrailingBackslash
.Подскажите пожайлусто
← →
Zeqfreed © (2006-09-22 12:16) [1]Что значит не работает? Эта ф-ция работает со строкой, а ошибка скорее всего в использовании этой строки.
← →
Dmitrij_K (2006-09-22 12:21) [2]Функция работает.
Ошибка в другом месте
← →
han_malign © (2006-09-22 12:25) [3]PathDelim = {$IFDEF MSWINDOWS} "\"; {$ELSE} "/"; {$ENDIF}
- по моему, где то в Win, я видел настройки которые позволяют перенастроить пути на *NIX-стиль... Но где, и не дежавю ли это - я не знаю(не помню)...
← →
RomanH © (2006-09-22 12:26) [4]
{ **** UBPFD *********** by kladovka.net.ru ****
>> Получение списка вложенных каталогов
Процедура служит ля получения списка каталогов вложенных в указанный каталог.
Полезно ее использовать для построения дерева каталогов.
Полученные в OutPaper данные можно передать процедуре Радионова Алексейя которая по ним построит дерево.
Зависимости: sysutils, classes, StdCtrls, UDBF.FillTreeViewWithFiles
Автор: Samsonov Aleksandr, s002156@mail.ru, Tver
Copyright: s002156Shurik
Дата: 19 сентября 2002 г.
********************************************** }
procedure GetTreeDirs(Root:String;OutPaper:TStringList);
var
i:Integer;
s:String;
procedure InsDirs(s:String;ind:Integer;Path:String;OPaper:TStringList);
var {Вставляет в Memo список вложенных директорий}
sr:TSearchRec;
attr:Integer;
begin
attr:=0;
attr:=faAnyFile;
if DirectoryExists(Path)then
if FindFirst(IncludeTrailingBackslash(Path)+"*.*",attr,SR) = 0 then
begin
repeat
if(sr.Attr=faDirectory)and(sr.Name[Length(sr.Name)]<>".")then
OPaper.Insert(ind,s+sr.Name);
until (FindNext(sr)<>0);
FindClose(SR);
end
end;
begin
{Проверяем существуетли начальный каталог}
if not DirectoryExists(Root) then exit;
{Создаем список каталогов первой вложенности}
if root[Length(Root)]<>"\" then
InsDirs(root+"\",OutPaper.Count,Root,OutPaper)
else
InsDirs(root,OutPaper.Count,Root,OutPaper);
i:=0;
repeat
s:=OutPaper[i]; //в s получаем путь к уже внесенному в список кат.
// Вставляем сразу за данной директорией в списке,
// список вложенных в нее директорий.
// Тем самым увеличиваем OutPaper.Lines.Count.
// Таким образом катологи в которых поиск еще не производился,
// оказываются ниже и очереь до них еще дойдет.
InsDirs(s+"\",i+1,OutPaper[i],OutPaper);
inc(i);
until (i=OutPaper.Count);
end;
Выполняю
procedure TForm1.Button1Click(Sender: TObject);
var
Strs : TStringList;
begin
Strs := TStringList.Create;
try
GetTreeDirs("C:\",Strs);
finally
Strs.Free;
end;
end;
Ошибка выделена и пишет: List index out of bounds[0]/
← →
Fay © (2006-09-22 12:27) [5]2 han_malign © (22.09.06 12:25) [3]
Оба слеша допустимы.
← →
umbra © (2006-09-22 12:45) [6]Относительно сабжа - есть
IncludeTrailingPathDelimiter
, но судя по ошибке, дело не в нем. Просто в начальном каталоге не было вложенных папок, стринглист оказался пустым и на строке
> s:=OutPaper[i];
получается именно эта ошибка.
← →
Dmitrij_K (2006-09-22 12:46) [7]В StringList счет начинается с нуля.
О чем тебе и говорит Delphi - выход за предел массива List index out of bounds и указывает на строку в которой произошло исключение.
← →
ЮЮ © (2006-09-22 12:50) [8]
> Просто в начальном каталоге не было вложенных папок
это на С:\ ??? :)
>Ошибка выделена и пишет: List index out of bounds[0]/
Поставь breakPoint и войди отладчиком во внутрь.
Когда-то надо начать отлаживать код, а не только писать
← →
umbra © (2006-09-22 13:01) [9]
> это на С:\ ??? :)
а может у него нет права чтения С:\ ? :)
← →
umbra © (2006-09-22 13:10) [10]к тому же, во всем остальном коде есть только одно обращение к тому же элементу списка и оно идет позже, а вставка элементов не может дать такой ошибки.
← →
Плохиш © (2006-09-22 14:03) [11]А меня вообще умилило, аФтар сначала пытается прочитать что-то и только потом проверяет, а есть оно что-то :-)
АФтар наверное и не знает, что существуют ещё циклы кроме repeat.
← →
Ketmar © (2006-09-22 18:12) [12]мда. за такие "примеры кода" надо расстреливать на месте без права апелляции.
Страницы: 1 вся ветка
Текущий архив: 2006.10.08;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.046 c