ЮБ
Юля Борисенко

Delphi Процедура создания иерархического древа папок (каталогов) . Функция просмотра вложений.

procedure CREATEFOLDERS(Str: String);

var

I: Integer;

StrTemp,CreateFolder: string;

begin

for I:=1 to Length(Str)+1 do

begin

If (Str[I]<>'\') and (I<=Length(str)) Then StrTemp:=StrTemp+Str[I] Else

begin

CreateFolder:=CreateFolder+StrTemp+'';

StrTemp:='\';

If not DirectoryExists(CreateFolder) Then MkDir(CreateFolder);

end;

end;

end;

Компонент тоже хорошо, мне просто нравиться разгадывать загадки.
Логика очень простая:
В изначальной строке записаны имена папок разделенные спецсимволом, наша задача просмотреть по отдельности каждый символ главной строковой переменной от начала до конца и в случае если просматриваемый символ НЕ является спецсимволом, т. е. не является "слэшом", то мы просто используем "Слияние, сложение двух строк (конкатенацию) " для временной, строковой переменной, а если нам попался спецсимвол, то мы еще раз используем конкатенацию для уже сложенной строки и обнуляем строковую переменную, но в нашем случае не просто обнуляем временную строковую переменную, а присваиваем её разделительный спецсимвол.

-Просматриваем отдельный символ строки вот так Str[номер символа в строке] ;
-Length(строка) - узнаём количество символов в строке.
-DirectoryExists(Строка) - Узнаём о существовании директории.
-MkDir(Строка) создаём папку.

Я за десять лет программирования сделал два больших, глобальных вывода:
1.) Это то что код нужно начинать от самых корней, иначе потом будешь "подмазывать" все дыры, а если вдруг вздумаешь добавить какую то дополнительную функцию своему коду, то вся программа рухнет и ты сам окончательно запутаешься где и чего.
2.) Основа программирования это работа с числовыми, строковыми переменными, условиями и циклами. Без этой основы очень сложно приходиться.

Работа с массивом не менее важная часть программирования.
Вот с записью в массив и последующим выводом из массива.

var
arr: array of string;

procedure CREATEFOLDERS(Str: String);
var
I,x: Integer;
StrTemp,CreateFolder: string;
begin
x:=0;
for I:=1 to Length(Str)+1 do
begin
If (Str<>'\') and (I<=Length(str)) Then StrTemp:=StrTemp+Str Else
begin
SetLength(arr,x+1);
arr[x]:=StrTemp;
StrTemp:='';
x:=x+1;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CREATEFOLDERS(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
Memo1.Lines.Clear;
for i:=0 to High(arr) do
begin
Memo1.Lines.Add(arr);
end;
end;

"Александр Бобков" не могу про ForceCreateDir найти. Что там за тайная функция такая?

Хотя нет, что то нашел:

ForceCreateDir
Создание вложенных каталогов

Syntax:
function ForceCreateDir(Dir:shortstring):integer;

Описание:
Например, для создания каталога NewDir1/NewDir2/NewDir3 в каталоге RootDir, напишите:
fdbObject.DS.ForceCreateDir('RootDir/NewDir1/NewDir2/NewDir3');
Функция возвращает код ошибки.

See also:
TDSystem.CreateDir

Алексей
Алексей

Помоему там есть готовый компонент, не помню на какой вкладке. Но точно есть. Даже без дополнительных библиотек в стандартном. У мя 7 версия.

И не понял зачем переменная i создана, и связаный с ней цыкл?

Ал
Алексей

Почитай про функцию ForceCreateDir

Похожие вопросы
Как писать файлы отдельно от вложенных папок и их файлов в Delphi. Пока они пишутся смешанно по алфавиту
Паскаль (процедуры и функции)
Каталог монет в Delphi 7
delphi создание программы.
Вопрос про вызов процедур в delphi
Как при нажатии на кнопку вызвать процедуру, Delphi
как создать многопараметровой функции или процедуры на Delphi на пример как процедура Write
Создание объектов в Delphi
Просмотр товара в Delphi
Delphi Какие функции есть в delphi для чтения дорожек/секторов?