- •24.1. Іменування файлів у Windows
- •24.2. Створення і відкриття файлів
- •24.3. Закриття і видалення файлів
- •24.4. Запис даних у файл
- •24.5. Звільнення буферів файла
- •24.6. Читання даних з файла
- •24.7. Копіювання файла
- •24.8. Переміщення файла
- •24.9. Заміщення файла
- •24.10. Робота з покажчиком позиції файла
- •24.11. Визначення і зміна атрибутів файла
- •24.12. Визначення і зміна розмірів файла
- •24.13. Блокування файла
- •24.14. Отримання інформації про файл
24.9. Заміщення файла
У Windows 2000 і Windows XP визначена функція ReplaceFile(), яка призначена для заміщення файлів. Істотна відмінність цієї функції від функцій CopyFile() і MoveFile() полягає в тому, що вона копіює в заміщуваний файл не лише атрибути доступу, але також і атрибути безпеки файла-замісника. Відмітимо також, що функція ReplaceFile() працює тільки з файлами, які знаходяться на одному томі (логічному диску).
Функція ReplaceFile() має наступний прототип:
BOOL ReplaceFile(
LPCTSTR lpReplacedFileName, // ім’я файла, який заміщається
LPCTSTR lpReplacementFileName, // ім’я файла-замісника
LPCTSTR lpBackupFileName, // ім’я резервної копії файла-замісника
DWORD dwReplасеFlags, // опції заміщення
LPVOID IpExclude, // не використовується
LPVOID lpReserved); //не використовується
Функція заміщення файлів у разі успішного завершення повертає ненульове значення, інакше - false. Коротко опишемо призначення параметрів цієї функції.
Параметр lpReplacedFileName повинен вказувати на рядок, який містить ім’я файла, який заміщається. При цьому відмітимо, що функція ReplaceFile() може як створювати новий файл, так і використовувати вже існуючий.
Параметр lpReplacementFileName повинен вказувати на рядок, який містить ім’я файла-замісника. Цей файл замінить файл, на який вказує параметр lpReplacedFileName. При цьому відмітимо, що сам файл-замісник видаляється з диска.
У параметрі lpBackupFileName встановлюється адреса рядка, який містить ім’я файла, який містить резервну копію файлу-замісника. Якщо цей параметр встановлений в null, то резервна копія файла-замісника не створюється.
У параметрі dwReplасеFlags встановлюються прапорці, які вказують режими заміщення файла. Можна встановити будь-яку комбінацію наступних прапорців:
replacefile_write_through - звільнити буфери перед виходом з функції;
replacefile_ignore_merge_errors - ігнорувати помилки при копіюванні даних.
Параметри lpExclude і lpReserved не використовуються. Тому вони мають бути встановлені в null.
У лістингу 24.7 приведена програма, в якій показаний приклад використання функції ReplaceFile() для заміщення файла.
// Лістинг 24.7. Заміщення файла
#include "stdafx.h"
#define _WIN32_WINNT 0x0500
int main()
{
wchar_t lpszFileName[] = L"C:\\Users\\Shogun\\Documents\\demo_file.dat";
wchar_t lpszNewFileName[] = L"C:\\Users\\Shogun\\Documents\\new_file.dat";
wchar_t lpszBackFileName[] = L"C:\\Users\\Shogun\\Documents\\back_file.dat";
// переміщаємо файл
if(!ReplaceFile(
lpszFileName, // ім'я файла, який заміщається
lpszNewFileName, // ім'я файла замісника
lpszBackFileName, // ім'я резервного файла
REPLACEFILE_WRITE_THROUGH, // звільнити буфери
NULL, NULL // не використовується
))
{
std::cerr << "Replace file failed." << std::endl
<< "The last error code: " << GetLastError() << std::endl;
std::cout << "Press any key to finish.";
std::cin.get();
return 0;
}
std::cout << "The file is replaced." << std::endl;
std::cin.get();
return 0;
}
