
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Сообщ.
#1
,
|
|
|
Вопрос по использованию try - catch(...)
У меня есть такой пример, записываю и читаю с файла: ![]() ![]() void DataWrite() { int i, j; FILE *f; f = fopen(e::filename, "wb"); fwrite(&e::elementubound, sizeof(e::elementubound), 1, f); for (i=0; i<e::elementubound; i++) { fwrite(&e::element[i].param, sizeof(e::element[i].param), 1, f); fwrite(&e::element[i].value, sizeof(e::element[i].value), 1, f); } fflush(f); fclose(f); } void DataRead() { int i, j; FILE *f; f = fopen(e::filename, "rb"); fread(&e::elementubound, sizeof(e::elementubound), 1, f); for (i=0; i<e::elementubound; i++) { fread(&e::element[i].param, sizeof(e::element[i].param), 1, f); fread(&e::element[i].value, sizeof(e::element[i].value), 1, f); } fclose(f); } Если я своей программой записываю и потом считываю - никаких проблем. Проблемы появляются тогда, когда происходит открытие файла с совпадающим расширением. т.е. программа выходит за пределы отведенной ей памяти. Попробовал использовать try - catch(...) Добавлено ![]() ![]() void DataReadNew() { int i, j; FILE *f; try { f = fopen(e::filename, "rb"); fread(&e::elementubound, sizeof(e::elementubound), 1, f); for (i=0; i<e::elementubound; i++) { fread(&e::element[i].param, sizeof(e::element[i].param), 1, f); fread(&e::element[i].value, sizeof(e::element[i].value), 1, f); } fclose(f); } catch(...) { MessageBox(e::formhwnd, "Error file open - File format not valid", " Message", MB_OK); } } Добавлено и вместо сообщения "Error file open - File format not valid" получаю зависание программы, что не так ? Эта тема была разделена из темы ""обработка исключений" vs "обработка кодов возврата"" |
Сообщ.
#2
,
|
|
|
Так при чтении просто смотрите на количество прочитанных байт из файла, что вам fread возвращает
|
Сообщ.
#3
,
|
|
|
try - catch(...) в моем понимании для того, чтобы отлавливать исключительные ситуации, попытка читать из файла за его пределами или писать за пределы - на мой взгляд и есть исключительная ситуация.
|
Сообщ.
#4
,
|
|
|
Цитата H g @ try - catch(...) в моем понимании для того, чтобы отлавливать исключительные ситуации, попытка читать из файла за его пределами или писать за пределы - на мой взгляд и есть исключительная ситуация. Но не на взгляд API, которое вы используете ![]() Это вообще API из Си, в котором нет исключительных ситуаций. |
Сообщ.
#5
,
|
|
|
Цитата H g @ или писать за пределы А так вообще бывает? На диске место может закончится -- слышал. Про квоты слышал. А про писать за пределы файла -- что-то новое. Добавлено И вообще. Прежде стоит изучить работу функций, которыми пользуетесь, а потом писать код. Попытка ловить исключения, которых не будет -- не сработает. А вот прочитав про возвращаемые значения сразу можно понять суть работы и сигнализацию об ошибках. |
Сообщ.
#6
,
|
|
|
macomics, D_KEY теперь понятно )) спасибо за ответы
|