15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как заменить или переместить файл, используемый другим приложением.

Автор: Marcus Neves

В Windows NT 4/2000 есть такая API функция, имеющая очень интересный последний аргумент. Функция позволяет также переименовывать указанный файл или директорию.

MoveFileEx(ExistingFN, NewFN, MOVEFILE_REPLACE_EXISTING или
                              MOVEFILE_DELAY_UNTIL_REBOOT

Если задать MOVEFILE_DELAY_UNTIL_REBOOT в dwFlags (характерно для Windows NT 4/2000), то в реестр будет занесена специальная информация и после перезагрузки Windows сотрёт или перепишет указанный файл
                                      
Параметры:

ExistingFN указатель на строку (null-terminated) , которая содержит имя нужного нам файла или директории.

NewFN указатель на строку (null-terminated), содкржащую новое имя файла, указанного ExistingFN.

Флаг MOVEFILE_REPLACE_EXISTING указывает функции заменить, если файл ExistingFN уже существует. Если указать в NewFN - nil, ExistingFN будет стёрт.

Пример:

* Перемещение файла:

MoveFileEx('c:\winnt\system32\kernel32.dll', 'd:\winnt.bak\system32\kernel32.dll',
MOVEFILE_REPLACE_EXISTING или MOVEFILE_DELAY_UNTIL_REBOOT

* Удаление существующего файла:

MoveFileEx('c:\winnt\system32\kernel32.dll', nil,
MOVEFILE_REPLACE_EXISTING или MOVEFILE_DELAY_UNTIL_REBOOT