Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
24 Робота з файлами у Windows.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
559 Кб
Скачать
☆

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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]