Главная страница
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.013 c
3-99449
Кирилл1
2003-12-05 23:05
2003.12.30
цвет линий Dbgrid


14-99774
kaif
2003-12-05 17:15
2003.12.30
Совершенная модель демократии


1-99612
TUser
2003-12-17 11:01
2003.12.30
Сумма


1-99589
tuzik
2003-12-17 06:05
2003.12.30
поиск


3-99504
Denisiy
2003-12-04 12:30
2003.12.30
Странная вещь в работе с таблицей через TTable.... не понимаю...