Ваш лучший вариант здесь - использовать функцию CreateNew при открытии файла для записи.
Существует простой надежный способ проверить наличие файла на диске. Единственное, что вы можете проверить, - это то, есть ли файл и может остаться на диске, к которому у процесса есть хотя бы ограниченная форма доступа.
Даже если вы закроете весь доступ к файлу из своего приложения, вы не можете надежно предотвратить создание или удаление какого-либо другого приложения. Даже при наличии достаточных блокировок на уровне файловой системы пользователи могут делать нечестные вещи, например, извлечь USB-ключ из компьютера.
Лучший способ подойти к этой проблеме - использовать открытые параметры, такие как CreateNew.Это позволит выполнить операцию только в том случае, если файл не существует в момент, когда создается попытка создания. Вы можете поймать исключение в этот момент и попытаться сделать вывод, было ли это из существующего файла или какого-либо другого недопустимого исключения доступа.
Такие методы, как File.Exist дают ложное чувство безопасности вашего кода базы и должны быть тщательно изучены на проверку в.
является файл семафора, почему так много споров? – DevelopingChris
DevelopingChris: Нет, я просто не хочу случайно перезаписывать его, так как шанс моего генератора randomId (используя класс random) может генерировать одинаковые идентификаторы из-за многоядерных процессоров и синхронизации. – 2009-07-07 05:57:23
См. Также http://stackoverflow.com/questions/425956/ как-д-я-определение, если-ан-IOException-это-брошен, потому-на-а-обмен-нарушения. Принятый ответ имеет очень полезную ссылку. – finnw