В случае открытия файла, который уже открыт, зависит от знания эффекта запроса, сбросит ли он, например, текущее местоположение чтения.
В случае закрытия файла, который уже закрыт, воспринимайте его как запрос на перевод файла в известное состояние. Код не должен ничего делать, но достигается желаемое состояние, чтобы код мог вернуть условие успеха. Это не так, если существует какая-то файловая буферизация, о которой нужно позаботиться или, возможно, связанный ресурс для координации, например модем / последовательный порт или принтер / спулер.
Отойдите назад и подумайте о проблеме с точки зрения желаемого результата, включая любые побочные эффекты.
Однажды мы добавили ссылку «Выход» в меню приложения, которое отображалось независимо от вашего статуса входа. Зачем? Потому что потребовался только простой (и очень короткий) метод для возврата вас на экран входа в систему с экрана входа в систему и сохранено большое количество проверок для отслеживания состояния входа в систему, чтобы элемент меню «Выход» отображался только тогда, когда Вы вошли в систему.