Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
14-99708
Style
2003-12-08 19:59
2003.12.30
Товарищи нужен совет!


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


1-99636
Новенький
2003-12-16 21:45
2003.12.30
Закрыть форму до открытия...


4-99827
Sergey Koshelev
2003-11-03 13:10
2003.12.30
Multimedia timer


3-99450
Voland
2003-12-05 20:54
2003.12.30
Не могу вставить запись в таблицу, SOS!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский