SLaks ответ неправильный, вы не можете переименовать весь каталог, если он содержит используемые файлы.
Однако вы можете переименовывать или перемещать используемые файлы. Я не знаю, работает ли это во всех версиях Windows, но я знаю, что это, безусловно, работает в Windows 7. Если программа имеет открытый файл, он останется открытым, но если что-то попытается открыть файл после перемещения, он очевидно, там больше не будет.
Таким образом, вы можете использовать это для замены исполняемого исполняемого файла, но если исполняемый файл пытается загрузить одну из DLL-файлов, от которых он зависел, и которые также были перемещены, приложение завершится сбоем на конечном пользователе.
В зависимости от того, что вы пытаетесь заменить, вы можете создать каталог для возможного удаления, переместить каждый файл, который должен быть заменен, в этот каталог, скопировать новый файл и, когда вы закончите, попытаться удалить каждый файл во временном каталоге. Затем, если остались какие-либо файлы, вы можете пометить их для последующего удаления следующим образом:
Функция «MoveFile» в C # (удаление файла после перезагрузки)
После дальнейших экспериментов я обнаружил, что вы можете перемещать файлы, которые используются, но только при определенных обстоятельствах. Если вы откроете файл с доступом к файлу «ShareDelete», он будет работать. Он также работает с исполняемыми файлами и библиотеками ... их можно перемещать, даже если их нельзя удалить. Но файл, который был открыт нормально (например, с помощью «File.OpenRead ()»), все равно выдаст исключение IOException для используемого файла.