Обработка возможных ошибок с файловым диском ввода-вывода - PullRequest
2 голосов
/ 28 января 2009

Я пытаюсь сделать файловый ввод-вывод через сетевой диск (вероятно, через WAN или VPN) максимально надежным для собственного приложения C ++ для Windows ...

Каковы возможные ошибки, с которыми мне нужно справиться?

Как я могу смоделировать эти ошибки при тестировании?

Как получить подробную информацию о конкретной ошибке? Например, если fopen() терпит неудачу, errno говорит мне все, что мне нужно знать, или мне нужно получить значение GetLastError()?

Как надежно различить «доступ к сетевому диску полностью функционален, но файл не существует» и различные проблемы с сетью или сервером?

Одна особая ошибка, которую я заметил на своем рабочем столе (не относится к разрабатываемому приложению), заключается в том, что иногда первая попытка доступа к файлу на сетевом диске завершается неудачно, но, вероятно, приводит к переподключиться в фоновом режиме, потому что последующие соединения работают. Я не знаю, что вызывает это. Это пример типа ошибки, которую я хочу правильно обработать.

РЕДАКТИРОВАТЬ: Это для устаревшего распределенного приложения, которое использует файлы на общих сетевых ресурсах для связи между узлами. Некоторые узлы могут оставаться без присмотра, поэтому передача ошибки конечному пользователю может быть невозможной. Долгосрочная цель - перейти на более качественный протокол, но в краткосрочной перспективе я хотел бы сделать файловый ввод / вывод максимально надежным.

1 Ответ

1 голос
/ 29 января 2009

Я полагаю, что вы подходите к этому с неправильной точки зрения. В самом приложении мало что можно сделать, чтобы улучшить проблему драйвера сетевой файловой системы, разве что реализовать сам сетевой ввод-вывод. При этом вам лучше выбрать подходящую сетевую файловую систему для ваших нужд. Посмотрите на это в Википедии.

Как правило, ваше приложение должно вести себя так, как будто файл хранится локально. Не пытайтесь слишком усердно решать проблемы с сетью. Но если вы правильно выбрали сетевую файловую систему, эти проблемы можно автоматически устранить.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...