Вверх ↑
Этот топик читают: Гость
Ответов: 356
Рейтинг: 31
#1: 2010-01-19 06:13:08 ЛС | профиль | цитата
Если возможно, дополните компонент Dir выводом значений в точку onEnd (как в DirTools точки doExists-onOK) или событием onError (как в FileAttributes) в случае неудачи при создании папки.
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#2: 2010-01-19 10:02:59 ЛС | профиль | цитата
olDjeka писал(а):
дополните компонент Dir выводом значений в точку onEnd

А вот теперь предположим, что кто-то ипользует пустое событие выхода (да мало ли для чего), а мы ему на выход данные подадим, нарушится работоспособность схемы. И чел будет долго искать, а где же у него ошибка, вроде, раньше работала. Вот потому, такое добавление, в плане совместимости, нежелательно
------------ Дoбавленo в 10.12:
olDjeka писал(а):
или событием onError

А вот это, вполне возможно. Но, опять таки -- если кто-то использует событие onEnd при любом результате создания, если поставить условие удачно/неудачно, то опять нарушиться совместимость. А ставить два события, onError и onEnd, тоже неправильно.

Вывод: оставляем все "как есть", если только руководство не предложит другой вариант
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#3: 2010-01-19 11:18:17 ЛС | профиль | цитата

function ForceDirectories(Dir: string): Boolean;
т.е. функция выдает вполне конкретный результат - создалсянесоздался
nesco писал(а):
А вот теперь предположим, что кто-то ипользует пустое событие выхода
используя пустое событие - работа со знаменитым русским "авось" или с последующей проверкой на создалсянесоздался (у попа была собака).
Считаю, что olDjeka прав.
nesco писал(а):
нарушится работоспособность схемы.
если хорошо подумать, то работа старой, правильно созданой схемы, не нарушится и совместимость не пострадает. Во всяком случае у меня такой пример представить не получается.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:olDjeka
Разработчик
Ответов: 26304
Рейтинг: 2146
#4: 2010-01-19 11:28:21 ЛС | профиль | цитата
Tad писал(а):
если хорошо подумать, то работа старой, правильно созданой схемы, не нарушится и совместимость не пострадает

Нарушиться. Читаем внимательно
nesco писал(а):
если кто-то использует событие onEnd при любом результате создания, если поставить условие удачно/неудачно, то опять нарушиться совместимость. А ставить два события, onError и onEnd, тоже неправильно

И я знаю схему, где это нарушиться. Все. На этом дебаты по этому вопросу закрываем до ответа руководства
------------ Дoбавленo в 11.31:
Мое мнение такое, что перестаем добавлять в компоненты разные мелкие фичи на каждый чих, каждого пользователя, раньше прекрасно обходились и без них, обойдуться и сегодня. Кому надо, тот возьмет себе и добавит
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#5: 2010-01-19 15:17:01 ЛС | профиль | цитата
nesco писал(а):
перестаем добавлять в компоненты разные мелкие фичи на каждый чих, каждого пользователя
по моему, это совсем не "мелкий чих". Ждем " ответа руководства".
Это конечно очень верно и по нашему, не проверив на удачно/неудачно, выполнять программу дальше.
nesco писал(а):
И я знаю схему, где это нарушиться.
ссылочу или кусок схемы. Пож.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2010-01-19 15:39:08 ЛС | профиль | цитата
совместимость нарушится только в том случае, если ForceDirectories выдает ошибку при попытке создать путь, который уже существует. В противном случае такой код:
#pas
if ForceDirectories(ToString(_Data)) then
_hi_CreateEvent(_Data,@_event_onEnd)
else _hi_CreateEvent(_Data,@_event_onError);
ничего принципиально значимого ни в какой схеме изменить не должен
карма: 27
0
Ответов: 16884
Рейтинг: 1239
#7: 2010-01-19 15:54:09 ЛС | профиль | цитата
А я думал так.

#pas
procedure THIDir._work_doDir;
begin
If ForceDirectories(ToString(_Data)) then
_hi_CreateEvent(_Data,@_event_onEnd, ToString(_Data)+'\')
else _hi_CreateEvent(_Data,@_event_onError);
end;
Т.е. при благополучном создании или наличии директории выдать путь к ней.
И никому этот путь не повредит.
Ну не смог я придумать ситуацию, где бы это смогло случиться.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2010-01-19 15:58:34 ЛС | профиль | цитата
а это уже нарушение совместимости. Самое непосредственное причем.
карма: 27
0
Ответов: 16884
Рейтинг: 1239
#9: 2010-01-19 16:00:00 ЛС | профиль | цитата
Tad писал(а):
Ну не смог я придумать ситуацию, где бы это смогло случиться

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2010-01-19 16:13:22 ЛС | профиль | цитата
Tad, мне(да и nesco, тоже) кажется совершенно очевидным тот факт, что выдача в поток чего угодно на какую угодно точку любого элемента ведет к нарушению совместимости с частью схем. Пример этой банальной ситуации даже не ловко приводить тем более человеку со стажем 5 лет работы
code_16567.txt
карма: 27
0
файлы: 1code_16567.txt [363B] [177]
Ответов: 16884
Рейтинг: 1239
#11: 2010-01-19 16:36:35 ЛС | профиль | цитата
Да на пример даже неловко смотреть = в любом случае (в этом примере) в If_else событие False и никогда не True.
Только не надо говорить, что в первом случае будет событие пустое, а в моем выдаст путь. Я это знаю.
И то что всем последующим компонентам схемы этот путь по барабану тоже знаю.
Tad писал(а):
если хорошо подумать, то работа старой, правильно созданой схемы, не нарушится и совместимость не пострадает.


P.S. Обзывать и стыдить не надо.
Просил четкий пример у nesco, который
nesco писал(а):
И я знаю схему, где это нарушиться.

Я тоже хочу знать эту схему.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26304
Рейтинг: 2146
#12: 2010-01-19 16:48:22 ЛС | профиль | цитата
Dilma писал(а):
совместимость нарушится только в том случае, если ForceDirectories выдает ошибку при попытке создать путь, который уже существует

В VHiUpdate выход onEnd используется всегда (да и не в нем одном), в случае попытки создать папку, которая уже есть это событие используется для дальнейшего копирования, просто, как источник события, и ничего более, предполагая, что папка уже есть, независимо, что создана она сейчас или вчера. Для совместимости предложенной схемы с вашим логическим вариантом, необходимо будет во всех таких схемах соединить две точки в один поток (onEnd и onError), что есть прямое нарушение совместимости большинства, ранее созданных, схем.

Я, категорически против такого подхода, есть для этого компонент DirTools, вот его и используйте для проверки наличия папки, и, если ее нет, то создавайте, если не устраивает штатный подход
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#13: 2010-01-19 17:16:54 ЛС | профиль | цитата
nesco писал(а):
В VHiUpdate выход onEnd используется всегда...предполагая, что папка уже есть
Типичный рассчет на "авось есть".
А я предполагаю (слово то какое успокаивающее ) что ее нет и она по какой-то причине не создалась?

#pas
//[function ForceDirectories]
function ForceDirectories(Dir: string): Boolean;
begin
Result := Length(Dir) > 0; {Centronix}
If not Result then Exit; // Dir не задан, а событие получили
Dir := ExcludeTrailingPathDelimiter(Dir);
If (Length(Dir) < 3) or DirectoryExists(Dir) or
(ExtractFilePath(Dir) = Dir) then Exit; // avoid 'xyz:\' problem. // Директорий есть - опять событие
Result := ForceDirectories(ExtractFilePath(Dir)) and CreateDir(Dir); // Директорий создан - опять событие
end;
а мы в любом случае пишем файлы - нам пофик есть папка или нет.
nesco писал(а):
Я, категорически против такого подхода
Вот здесь я тебя поддерживаю
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Администрация
Ответов: 15295
Рейтинг: 1519
#14: 2010-01-19 18:23:40 ЛС | профиль | цитата
Tad писал(а):
Да на пример даже неловко смотреть = в любом случае (в этом примере) в If_else событие False и никогда не True.

Вы издеваетесь коллега? Пример показывал типичную ошибку при сравнении любого значения с NULL, нулем или пустой строкой.

Судя по коду ForceDirectories разделение на onEnd и onError отменяется.
карма: 27
0
Разработчик
Ответов: 26304
Рейтинг: 2146
#15: 2010-01-19 19:30:21 ЛС | профиль | цитата
Cамое большое, что можно сделать, так это только вот так, тогда не будет нарушена совместимость ни с чем, хочешь, используй onError, хочешь -- onEnd. Если руководство не найдет ничего поротиворечивого в коде, то я его добавлю


procedure THIDir._work_doDir;
begin
_hi_onEvent(_event_onError, ord(ForceDirectories(ToString(_Data))));
_hi_CreateEvent(_Data,@_event_onEnd);
end;
карма: 22

1
Голосовали:olDjeka
Сообщение
...
Прикрепленные файлы
(файлы не залиты)