- 1
- 2
- 3
HRESULT hr = ReadGenericXMLFile(srcStorage, pagePath, result);
if (hr == S_FALSE) return STG_E_FILENOTFOUND; // File must exist
if (FAILED(hr)) return hr;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+9
HRESULT hr = ReadGenericXMLFile(srcStorage, pagePath, result);
if (hr == S_FALSE) return STG_E_FILENOTFOUND; // File must exist
if (FAILED(hr)) return hr;
Могу понять, обратное, когда вызывающая функция просто возвращает "false" при любом неудачном вызове внутренней функции: нет файла / нет доступа / runtime error и т.д. Здесь же наоборот, при "общем" неудачном вызове внутренней функции возвращается "конкретное" сообщение об ошибке.
Bart 25.07.2013 22:39 # 0
А как будете узнавать, какая же именно ошибка случилась? using std::telepathy?
bormand 25.07.2013 22:59 # +1
По логам например.
Fogbot же не поощряет такую практику. Он просто говорит, что возврат false в случае любой ошибки более вменяем, чем возврат FILENOTFOUND в случае хрен знает какой ошибки. Да, false само по себе не даст понять причину ошибки. Но оно хотя бы не введет в заблуждение - пользователю очень весло будет смотреть на сообщение "файл не найден" на битом файле, и еще и еще раз пытаться скормить его программе...
P.S. Total Commander, емнип, при запуске экзешки при любом фейле выдавал то самое "Файл не найден". И меня это жутко бесило. Лучше уж "неизвестная ошибка при запуске" чем так.
anonimb84a2f6fd141 26.07.2013 00:01 # +1
Продолжим старую тему - а куда с него валить? Только не говорите про фар, кококонсолечка была моветоном в конце 90х, а сейчас - тем более.
wvxvw 26.07.2013 00:42 # 0
anonimb84a2f6fd141 26.07.2013 07:41 # 0
Чтоэта?
bormand 26.07.2013 07:47 # 0
anonimb84a2f6fd141 27.07.2013 18:21 # +1
anonimb84a2f6fd141 27.07.2013 21:39 # +1
wvxvw 26.07.2013 09:14 # 0
defecate-plusplus 26.07.2013 07:09 # +2
смени себе шрифт на нормальный трутайп - ту же люсиду хотя бы, поставь размер удобный, установи размер окна, чтобы почти на весь рабочий стол, домешай плагинов (хотя второй фар и так нормален, ты же не собрался в нем же и код писать?) - и вот ты получил возможностей на порядок больше, чем убогий мышкоюзерный тотал коммандер
и работает быстро
тебе рюшечки нужны или рабочий инструмент?
anonimb84a2f6fd141 26.07.2013 07:41 # +1
консолечный мышкоюзерный же фар, только еще и консолечный.
>работает быстро
Типа тотал тормозил?
defecate-plusplus 26.07.2013 07:52 # +1
но я не юзал никогда, только видел на компе у сотрудника
там чуть ли не notepad вызывается для просмотра, да?
bormand 26.07.2013 08:31 # +1
Как настроишь. Встроенный lister или любая внешняя прога.
> проблемы открывать десятимегабайтные текстовые файлы
Не знаю, когда юзал - никаких проблем с большими файлами не было. А открывал им иногда и по 2 гига и по 4.
bormand 26.07.2013 08:38 # 0
А вот тут как раз фар его рвет. Не знаю конечно, может в новых тоталах и запилили эту фишку, но старый, если я конечно не туплю, так не умел.
anonimb84a2f6fd141 27.07.2013 18:20 # 0
bormand 27.07.2013 19:55 # 0
anonimb84a2f6fd141 27.07.2013 21:36 # 0
bormand 28.07.2013 06:43 # 0
anonimb84a2f6fd141 28.07.2013 08:14 # −1
anonimb84a2f6fd141 27.07.2013 18:19 # 0
>но я не юзал никогда, только видел на компе у сотрудника
Не читал, но осуждаю.
defecate-plusplus 28.07.2013 01:04 # 0
что там ваш встроенный листер обновляет при перемотке я не знаю, приходится телодвижения делать, чтобы посмотреть что в файл добавилось?
anonimb84a2f6fd141 28.07.2013 05:57 # 0
bormand 28.07.2013 06:45 # 0
Или ты делаешь какой-нибудь запрос к серваку, и сразу, без телодвижений, видишь новую запись в логе. Или тебе надо перефокусировать окно, нажать N, нажать End, вернуться к клиенту и так далее. Что из этого удобней? :)
anonimb84a2f6fd141 28.07.2013 08:13 # 0
bormand 28.07.2013 09:00 # 0
Да, просто нажимаешь end, и он подвешивается к концу файла, прокручивая вывод при появлении новой инфы.
> А как фар и tail следят за обновлением файла?
Точно не знаю, но скорее всего просто раз в секунду пытаются прочесть файл с последнего офсета. Если что-то прочиталось - выводят, и продолжают попытки уже с нового места.
anonimb84a2f6fd141 28.07.2013 10:47 # −1
defecate-plusplus 28.07.2013 11:03 # +6
bormand 28.07.2013 11:35 # 0
Bart 27.07.2013 11:48 # 0
> Да, false само по себе не даст понять причину ошибки.
В лог надо что-то же записать. А как определить, что именно зафейлило, если в качестве сигнала об ошибке приходит просто "ошибко"? Разве что GetLastError-подобными методами, что тоже не шибко удобно. Или я чего-то не знаю?
А когда прога на все фейлы выдает "файл не найден" - проблема скорее в криворучии автора, в силу его лени не придавшего значения таким ситуациям.
bormand 27.07.2013 17:07 # +1
Адекватное сообщение в духе "Файл /home/xxx/hui.dat не найден" можно выдать только в той функции, которая знала, какой файл пытались открыть. И если она это не сделает, а просто передаст код на уровень выше - этот код может стать настолько же бесполезным, насколько и ненавистное вам false. Программа будет выдавать идиотское "Файл не найден", которое никак не поможет пользователю. Но да, код ошибки по сравнению с false удобней для программы в том плане, что она может адекватней отреагировать на ошибку, и попытаться как-то устранить ее причины.
> В лог надо что-то же записать.
А я пишу в логи. Много пишу. И ни разу еще об этом не пожалел. Во время разбора полетов логи за вчерашний-позавчерашний день часто оказываются ценнее, чем нынешние сообщения об ошибках.
P.S. Вы видимо не дочитали мой коммент до конца? Ок, повторю пропущенную вами мысль: Здесь никто не говорит, что возвращать false хорошо. Я и Fogbit утверждали лишь то, что возвращать false или UNKNOWN_ERROR вменяемее, чем возвращать FILE_NOT_FOUND вместо корректного кода ошибки. Неправильный код ошибки вводит пользователя в заблуждение, а это намного хуже, чем отсутствие инфы, которое дают нам false и unknown error. С этим, надеюсь, вы не будете спорить?
Bart 28.07.2013 18:55 # +1
Видимо, я тогда недопонял ваши идеи до конца. Теперь все стало по местам.
P.S: логи и я пишу. Лишь хотел уточнить, что в лог нужно писать полезную инфу, которую перед тем надо подготовить.
Fogbit 26.07.2013 10:48 # +1
Не утверждаю что эта схема идеальна, но имхо в ней есть хотя бы толика логики. Здесь же просто если внутри случается S_FALSE, то стороннему юзеру возвращается STG_E_FILENOTFOUND. Конечно можно предположить костыль-схему "если ReadGenericXMLFile вернула S_FALSE, то это может значить только STG_E_FILENOTFOUND", однако такую схему трудно модифицировать.
bormand 26.07.2013 10:50 # +1
Fogbit 26.07.2013 10:51 # +1
bormand 25.07.2013 22:58 # +1
anonimb84a2f6fd141 27.07.2013 18:24 # +1