Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-39506
Думкин
2003-02-21 06:05
2003.03.13
Россия


1-39328
mihnik
2003-02-28 16:44
2003.03.13
Подскажите, pls, как русифицировать стандартные


3-39223
Ahmad K
2003-02-23 00:13
2003.03.13
Как узнать номер последней записи в BD?


14-39561
race1
2003-02-24 17:09
2003.03.13
сон


6-39457
H-A-O-S
2003-01-23 13:53
2003.03.13
КУКИСЫ!!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский