Вам не нужно делать ничего особенного, чтобы сделать эту работу. Сначала попробуйте открыть файл с помощью FileAccess.ReadWrite и FileShare.Read. Если вы не получите IOException, у вас будет эксклюзивный доступ на запись в файл. Другие процессы могут читать из файла, но никогда не могут получить права на запись.
Если эта попытка открытия не удалась, вы можете предположить, что у кого-то еще есть файл, открытый для записи. Теперь переключите внутреннюю логику программы в режим «только для чтения» и откройте файл с помощью FileAccess.Read и FileShare.ReadWrite. Если это все еще бомбы, то с файлом что-то принципиально не так, IOException скажет вам, что.
Будьте очень осторожны, чтобы избежать теста "заблокирован ли файл". Это не может работать надежно в сети, вы должны держать файл открытым после получения доступа к нему. Как только вы закроете его, другой процесс сможет получить к нему доступ, через наносекунду позже.
Другая типичная проблема с этим типом блокировки заключается в том, что пользователь обычно хочет знать, у кого есть блокировка на файл. Windows не предоставляет никакого стандартного способа выяснить это. Office решает эту проблему, создавая скрытый файл в том же каталоге с тем же именем, что и у файла, но с другим расширением имени файла. Он записывает имя пользователя в этот файл, доступный любому процессу, который находит файл заблокированным. Вы можете сделать то же самое, Environment.UserName будет хорошо для этого.