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