Как обнаружить Систему. IO.IOException вызывают существующим файлом?

если Вы - пробабушка Java, проверяете платформа Struts людьми Apache.

5
задан 7 July 2009 в 00:13
поделиться

5 ответов

Следует избегать принятия логических решений на основе содержимого свойства Exception.Message. Это определено как удобочитаемое сообщение, а не то, что программа может прочитать. Такие сообщения могут быть изменены без предварительного уведомления.

Удобочитаемые сообщения часто изменяются, чтобы сделать их более удобочитаемыми для людей. Это не сделает вашу программу более счастливой.


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

Проверьте, не возникает ли исключение System.IO.FileNotFoundException , когда файл не существует. Попробуйте перехватить это вместо исключения IOException.

5
ответ дан 18 December 2019 в 09:52
поделиться

Я не уверен, что он вообще хочет открыть файл, если он уже существует.

Я думаю, что он действительно после FileMode.CreateNew , это вызовет IOException , если файл уже существует, но в противном случае создаст и откроет его.

6
ответ дан 18 December 2019 в 09:52
поделиться

Вы всегда можете проверить File.Exists () ... из ВНУТРИ блока исключения исключения. Вы не хотите проверять раньше из-за многопоточности - поэтому проверяйте, когда уже знаете, что у вас есть проблема.

Если вы не удаляете файл внезапно из другого потока, это будет простой и очевидный способ сделать это. .

Не забывайте, что File.Exists сам по себе может вызвать исключение, поэтому обязательно перехватите его снова.

3
ответ дан 18 December 2019 в 09:52
поделиться

Лучше всего использовать опцию CreateNew при открытии файла для записи.

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

Даже если вы заблокируете весь доступ к файлу из своего приложения, вы не сможете надежно предотвратить создание / удаление файла каким-либо другим приложением. Даже при достаточных блокировках на уровне файловой системы пользователи могут делать гнусные вещи, например вынимать USB-ключ из компьютера.

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

Такие методы, как File.

3
ответ дан 18 December 2019 в 09:52
поделиться

Вы можете использовать File.Open и вызывать его с помощью FileMode.OpenOrCreate ].

За комментарий: Хорошо, а как насчет FileMode.CreateNew? Затем,

0
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: