Главная страница
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.012 c
3-99457
3LoBit
2003-12-03 16:27
2003.12.30
Ошибка Field ReadOnly в TClientDataSet


3-99502
Sour
2003-12-04 09:12
2003.12.30
Компоненты прямого доступа к IB FIBPlus


3-99458
Chris
2003-12-05 14:30
2003.12.30
Открыть базу без индексного файла


14-99698
Thor
2003-12-07 22:36
2003.12.30
шахматная проблема.


8-99653
Zheks
2003-08-28 22:13
2003.12.30
Canvas