Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.13;
Скачать: CL | DM;

Вниз

Критика кода.   Найти похожие ветки 

 
SPeller ©   (2003-03-03 17:07) [0]

Всем доброго времени суток! У меня только что встала задача создания последовательности папок любого уровня вложенности. Прикинув так и эдак наваял вот такой код:

type
PDirStack = ^TDirStack;
TDirStack = record
Dir: string; //Папка, которую надо создать
Prev: PDirStack; //Предыдущий элемент стека
end;

var DS: PDirStack; //Ссылка на последний эл-т стека

function _IntCreateDir: Boolean;
var n_DS: PDirStack;
begin
Result := False;
if (DS = nil) or (DS.Dir = "") then Exit;
if not CreateDirectory( PChar( DS.Dir ), nil ) then begin //Если папку создать не удалось, то
if GetLastError = ERROR_PATH_NOT_FOUND then begin //Смотрим причину неудачи. Если папка просто не существует, то
n_DS := AllocMem( SizeOf( TDirStack ) ); //Создаём новый элемент стека,
n_DS.Dir := uGetParentPath( DS.Dir ); //Заносим в стек родительскую папку по отношению к текущей
n_DS.Prev := DS;
DS := n_DS;
Result := _IntCreateDir; //Вызываем создание для родительской папки
end else begin
Result := False; //Если причина невозможности создания иная (уже есть, недопустимые символы, нет доступа и т.п.), то возвращаемся и говорим что поделать ничего не можем.
end;
end else begin //Если же папку всё-таки создали, то
Result := True; //Говорим об этом,
n_DS := DS.Prev; //Вытаскиваем из стека следующую папку и
FreeMem( DS );
DS := n_DS;
if DS <> nil then Result := _IntCreateDir; //Пытаемся её создать.
end;
end;

function IntCreateDir( const Dir: string ): Boolean;
begin
DS := AllocMem( SizeOf( TDirStack ) );
DS.Dir := Dir;
Result := _IntCreateDir;
FreeMem( DS );
end;

Хочу просто узнать мнение знатоков о том на сколько мой метод достоен жизни, есть ли способ лучше, в чём плюсы и минусы именно такой реализации? Что здесь в конкретном случае я упустил, каковы недочёты и ошибки в реализации?


 
MBo ©   (2003-03-03 17:13) [1]

код не разбирал, но существуют DirectoryExists и ForceDirectories


 
Strumpf ©   (2003-03-03 17:56) [2]

> У меня только что встала задача

Счастливчик...


 
Palladin ©   (2003-03-03 18:16) [3]


> У меня только что встала задача

рестешь! :)


 
SPeller ©   (2003-03-03 18:49) [4]

И что вам так задача моя понравилась? :-))
Спасибо MBo, я просто не знал о ForceDirectories. Когда посмотрел её код, то понял что сам до такого не дошёл бы. Я чувствовал что близок когда мой вариант был точно таким же, но вот...... не туда срулил... :-)) Ну с кем не бывает :-)



Страницы: 1 вся ветка

Текущий архив: 2003.03.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-39373
grei
2003-03-02 19:37
2003.03.13
Открытие файлов через windows


4-39641
AlexG
2003-01-21 07:13
2003.03.13
В WinApi приложении выходит такая ошибка не могу понять почему


1-39279
KpeHgeJIb
2003-03-03 16:44
2003.03.13
Перетягивание картинки в произвольную часть экрана...


1-39385
mannik
2003-03-03 00:16
2003.03.13
FIND


14-39541
AFrolov
2003-02-26 13:30
2003.03.13
А как из Delphi с XML документами лучше работать?