2009-11-20 3 views
0

Я читал этот пост и смеялся http://mcfunley.com/239/exceptions-are-not-a-control-mechanismИсключение в качестве механизма управления

В одном из моих приложений я не использовать File.Exist даже Тхо я ОЖИДАТЬ файлы существуют много времени. Я пытаюсь создать файл, не перезаписывая старшего, и если это не удается, я переименую имя файла (Try Number) .ext и цикл, пока он не откроется.

Должен ли я использовать File.Exist в этом случае? или я должен продолжать пытаться открыть файл, цикл, пока я не буду писать шаблон?

ответ

0

Я бы посоветовал проверить File.Exist, путь исключения может быть очень дорогостоящим по производительности в противном случае.

+1

Производительность не всегда является проблемой с исключениями, зависит от языка и O/S. Также открытие файла, скорее всего, будет в некритической части кода. –

+0

ОК, я aggree, но я считаю себя защитным программистом. Скорее верьте, что пользователь моего кода не совсем уверен, что они делают. –

0

Исключения для исключительных ситуаций.

Все что вам нужно - это тест; в этом нет ничего исключительного, поэтому используйте, если File.Exist.

1

Я оставил бы на некоторое время все «исключения из исключительной ситуации» и просто проанализировал вашу ситуацию, чтобы убедить вас, что это правильно, и вы должны использовать исключения только для исключительных ситуаций.

В вашем случае, казалось бы, сделать

while (!opened) { 
    try { 
     <file_open>; 
     opened = true 
    } catch (exception) { 
     //ignore 
    } 
} 

Вы бы в конечном итоге есть все процессорное время очень легко. Если вы

while (!opened) { 
    if (file.exists) { 
     <file_open> 
     opened = true 
    } else { 
     Thread.sleep(<some_time>); 
    } 
} 

Вы будете играть хорошо, давая вашему неиспользованное время для других процессов и держать процессор до минимума

Итак, на мой взгляд, я бы сказал, что это было бы очень хорошо идея сначала протестировать.

+0

Фактически я даю файлу другое имя, если его использовать, а также файлы не следует удалять, поэтому дождаться, когда он будет доступен для записи, никогда не произойдет, пока пользователь не решит его создать и переместить в другой склад. – 2009-11-20 14:36:28

+0

ОК, извините ошибка. Я не понимаю, что вы делаете, ожидая, что файл станет «доступным для записи». – laura

2

В моих исключениях мнений обычно должен быть зарезервирован для поистине исключительных обстоятельств по нескольким причинам:

  1. Исключение имеет накладные расходы высокой производительности (хотя это может на самом деле не проблема, когда, например, работа с файлами)
  2. Имея throing приложения и глотание большого количества исключений может сделать отладки очень трудно
    • вы можете проглотить исключение вы ищете где-то
    • Это может сделать это довольно трудно для других, чтобы следовать programmflow, exspecially если исключения поймают выше в колл-hierarchie

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

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