Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ForceDirectories


Юрий ©   (2003-04-15 15:26:00) 

Почему ForceDirectories в КОЛ определена как процедура, а не как функция, как это было изначально?

В Хелпах:
"Category
file management routines
function ForceDirectories(Dir: string): Boolean;"

Я исправил процедуру на функцию следующим образом:
function ForceDirectories(Dir: String): Boolean;
begin
Result := False;
// Copied from unit FileCtrl:
if Length(Dir) = 0 then Exit;
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir)
or (ExtractFilePath(Dir) = Dir) then Exit; // avoid "xyz:\" problem.
ForceDirectories(ExtractFilePath(Dir));
Result := CreateDir(Dir);
end;

Теперь можно записать:
if not DirectoryExists(sName)
then if not ForceDirectories(sName)
then begin
( "Could not create folder " + sName, MB_OK + MB_ICONEXCLAMATION)

Почему ForceDirectories в КОЛ определена как процедура, а не как функция, как это было изначально?

В Хелпах:
"Category
file management routines
function ForceDirectories(Dir: string): Boolean;"

Я исправил процедуру на функцию следующим образом:
function ForceDirectories(Dir: String): Boolean;
begin
Result := False;
// Copied from unit FileCtrl:
if Length(Dir) = 0 then Exit;
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir)
or (ExtractFilePath(Dir) = Dir) then Exit; // avoid "xyz:\" problem.
ForceDirectories(ExtractFilePath(Dir));
Result := CreateDir(Dir);
end;

Теперь можно записать:
if not DirectoryExists(sName)
then if not ForceDirectories(sName)
then begin
MsgBox("Could not create folder " + sName, MB_OK + MB_ICONEXCLAMATION);
exit;
end;

Или я что-то делаю не так, тогда просьба пояснить?


Юрий   (2003-04-15 19:08:00) [1]

И как вариант - без использования оператора exit:

function ForceDirectories(Dir: String): Boolean;
begin
if Length(Dir) = 0
then Result := False
else begin
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir) or (ExtractFilePath(Dir) = Dir)
then Result := True
( ExtractFilePath(Dir) [4]

И как вариант - без использования оператора exit:

function ForceDirectories(Dir: String): Boolean;
begin
if Length(Dir) = 0
then Result := False
else begin
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir) or (ExtractFilePath(Dir) = Dir)
then Result := True
else Result := ForceDirectories(ExtractFilePath(Dir)) and CreateDir(Dir);
end;
end;


Юрий   (2003-04-15 18:58:00) [2]

Неправильный я код привёл, согласно FileCtrl должно быть вроде так:

function ForceDirectories(Dir: String): Boolean;
if Length(Dir) = 0
then begin
Result := False; Exit;
end;
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir) or (ExtractFilePath(Dir) = Dir)
then begin
Result := True; Exit;
end;
Result := ForceDirectories(ExtractFilePath(Dir)) and
( Dir) [3]

Неправильный я код привёл, согласно FileCtrl должно быть вроде так:

function ForceDirectories(Dir: String): Boolean;
if Length(Dir) = 0
then begin
Result := False; Exit;
end;
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir) or (ExtractFilePath(Dir) = Dir)
then begin
Result := True; Exit;
end;
Result := ForceDirectories(ExtractFilePath(Dir)) and
CreateDir(Dir);
end;


Кладов   (2003-04-15 16:41:00) [3]

Это Эдвард Аретино выслал новую версию без учета моих улучшений, и я в спешке как было, так и вставил. Будет изменено повторно. Согласен, что как функция полезней.


Юрий   (2003-04-15 15:42:00) [4]

Последовательней будет так:
function ForceDirectories(Dir: String): Boolean;
begin
Result := False;
// Copied from unit FileCtrl:
if Length(Dir) = 0 then Exit;
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir)
or (ExtractFilePath(Dir) = Dir) then Exit; // avoid "xyz:\" problem.
if ForceDirectories(ExtractFilePath(Dir)) then
( Dir) [1]

Последовательней будет так:
function ForceDirectories(Dir: String): Boolean;
begin
Result := False;
// Copied from unit FileCtrl:
if Length(Dir) = 0 then Exit;
Dir := ExcludeTrailingPathDelimiter(Dir);
if (Length(Dir) < 3) or DirectoryExists(Dir)
or (ExtractFilePath(Dir) = Dir) then Exit; // avoid "xyz:\" problem.
if ForceDirectories(ExtractFilePath(Dir)) then
Result := CreateDir(Dir);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо