Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.30;
Скачать: CL | DM;

Вниз

ForceDirectories   Найти похожие ветки 

 
Юрий   (2003-04-15 15:26) [0]

Почему 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 15:42) [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
( 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;



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

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


 
Юрий   (2003-04-15 18:58) [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
( 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 19:08) [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
( 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;



Страницы: 1 вся ветка

Текущий архив: 2003.12.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
14-99786
VictorT
2003-12-04 18:13
2003.12.30
Для тех, кто бывает на дремучем форуме....


1-99642
Evgeniy_K
2003-12-13 17:53
2003.12.30
Форма границы, которой совпадают с границами Image


6-99693
Bart
2003-11-01 21:51
2003.12.30
TCPSERVER - HELP!


3-99444
hursand
2003-12-06 11:32
2003.12.30
Использоват хранимых процедур


3-99494
barbi
2003-12-04 14:14
2003.12.30
ПРо Интербейз