Я использовал такой алгоритм: записывал во временный файл В в целевой папке, проверял его, переименовывал целевой файл Ц во временное имя, переименовывал временный файл В в целевое имя, удалял временный файл Ц.
Перед открытием проверял наличие файла, если нет, то искал В или переименованный Ц.
А предыстория такая. Небольшой конфигурационной файл в маленькой локальной сети. Никак не думал, что может что-то случится, но где-то через месяц приложение свой файл не нашло. Так что пришлось придумать и реализовать такую схему. Пару лет уже работает без сбоев.