Главная страница
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.47 MB
Время: 0.017 c
14-39542
Nehto
2003-02-26 12:56
2003.03.13
Podskazhite please : gde mozhno skachat ikonki dlja knopok?


6-39453
Deader
2003-01-25 23:57
2003.03.13
Подскажите, как получить информацию об удаленном компе


7-39605
AL-Stuff
2003-01-18 09:53
2003.03.13
Обращение к TV-Tuner


1-39332
Andy BitOff
2003-02-28 22:33
2003.03.13
Почему не Drag n Drop пится


14-39527
evgeniy1981
2003-02-26 11:21
2003.03.13
Базы данных