2016-07-21 3 views
-2

От MSDN File.DeleteПочему File.Delete не запускался, когда файл не существует?

Если файл должен быть удален, не существует, исключение не выбрасывается.

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

+4

Если файл не существует, он как будто уже удалил его. – juharr

+0

Но что, если в вашей программе есть ошибка, и вы передали неправильное имя. Дополнительный слэш и т. Д. – crokusek

+1

Если вы хотите проверить наличие файла, используйте «File.Exists». 'File.Delete' отвечает за удаление файла. – dotctor

ответ

3

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

Should I call File.Exists before calling File.Delete?

Это устраняет дополнительные операции и исключает любые окна гонки.

+0

Почему существует некоторая конкуренция за удаление файлов? Это похоже на редкий случай, а не на то, что основной вызов следует ожидать. Конкурсные дела можно рассматривать как отдельный код. – crokusek

+3

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

0

Представьте себе ресторан, который имеет «Нет домашние животные» или «Нет Ружья воспрещен» знак на двери, и есть сканер для проверки этого.

Теперь предположим, что у вас нет питомца или пистолета, не могли бы вы поднять руку, чтобы сказать, что у вас ее нет? Может ли какая-либо безопасность входа поднять руку, чтобы сказать, что у вас ее нет? или вы просто переходите к сканеру и продолжаете?

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

Смежные вопросы