Форум: "Основная";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизКритика кода. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c