![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IncludeTrailingBackslash [XP]
RomanH © (2006-09-22 12:11:00)Мастера подскажите почему функция
IncludeTrailingBackslashработает в WinXP SP1, а в WinXP SP2 не работает,
может существует универсальная функция подобнаяIncludeTrailingBackslash.Подскажите пожайлусто
Ketmar (2006-09-22 18:12:00) [1]мда. за такие "примеры кода" надо расстреливать на месте без права апелляции.
Плохиш (2006-09-22 14:03:00) [2]А меня вообще умилило, аФтар сначала пытается прочитать что-то и только потом проверяет, а есть оно что-то :-)
АФтар наверное и не знает, что существуют ещё циклы кроме repeat.
umbra (2006-09-22 13:10:00) [3]к тому же, во всем остальном коде есть только одно обращение к тому же элементу списка и оно идет позже, а вставка элементов не может дать такой ошибки.
umbra (2006-09-22 13:01:00) [4]
> это на С:\ ??? :)
а может у него нет права чтения С:\ ? :)
ЮЮ (2006-09-22 12:50:00) [5]
> Просто в начальном каталоге не было вложенных папок
это на С:\ ??? :)
>Ошибка выделена и пишет: List index out of bounds[0]/
Поставь breakPoint и войди отладчиком во внутрь.
Когда-то надо начать отлаживать код, а не только писать
Dmitrij_K (2006-09-22 12:46:00) [6]В StringList счет начинается с нуля.
О чем тебе и говорит Delphi - выход за предел массива List index out of boundsи указывает на строку в которой произошло исключение.
umbra (2006-09-22 12:45:00) [7]Относительно сабжа - есть
IncludeTrailingPathDelimiter, но судя по ошибке, дело не в нем. Просто в начальном каталоге не было вложенных папок, стринглист оказался пустым и на строке
> s:=OutPaper[i];
получается именно эта ошибка.
Fay (2006-09-22 12:27:00) [8]2 han_malign © (22.09.06 12:25) [3]
Оба слеша допустимы.
RomanH (2006-09-22 12:26:00) [9]
{ **** 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]/
han_malign (2006-09-22 12:25:00) [10]PathDelim = {$IFDEF MSWINDOWS} '\'; {$ELSE} '/'; {$ENDIF}
- по моему, где то в Win, я видел настройки которые позволяют перенастроить пути на *NIX-стиль... Но где, и не дежавю ли это - я не знаю(не помню)...
Dmitrij_K (2006-09-22 12:21:00) [11]Функция работает.
Ошибка в другом месте
Zeqfreed (2006-09-22 12:16:00) [12]Что значит не работает? Эта ф-ция работает со строкой, а ошибка скорее всего в использовании этой строки.