- •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.7. Копіювання файла
Для копіювання файлів використовується функція CopyFile(), яка має наступний прототип:
BOOL CopyFile(
LPCTSTR lpExistingFileName, // ім’я існуючого файла
LPCTSTR lpNewFileName, // ім’я нового файла
BOOL bFileIfExists); // дії у разі існування файла
У разі успішного завершення функція повертає ненульове значення, інакше - false. При цьому відмітимо, що функція CopyFile() копіює для нового файла також і атрибути доступу старого файла, але атрибути безпеки не копіюються.
Параметри цієї функції мають наступне призначення.
Параметр lpExistingFileName повинен вказувати на рядок, який містить ім’я копійованого файлу.
Параметр lpNewFileName повинен вказувати на рядок з ім’ям файла, в який копіюватиметься існуючий файл. При цьому відмітимо, що новий файл створюється самою функцією CopyFile().
Параметр bFileIfExists визначає дії, які треба здійснити у разі, якщо файл, в який виконується копіювання, вже існує. Якщо значення цього параметра дорівнює false, то функція перезаписує існуючий файл. Якщо ж значення цього параметра рівне true, то виконання функції в цьому випадку закінчується невдачею.
У лістингу 24.5 приведена програма, яка виконує копіювання файлу, Використовуючи функцію CopyFile().
// Лістинг 24.5. Копіювання файла
#include "stdafx.h"
int main()
{
wchar_t lpszFileName[] = L"C:\\Users\\Shogun\\Documents\\demo_file.txt";
wchar_t lpszNewFileName[] = L"C:\\Users\\Shogun\\Documents\\new_file.txt";
// копіюємо файл
if(!CopyFile(lpszFileName, lpszNewFileName, FALSE)) {
std::cerr << "Copy 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 copied." << std::endl;
return 0;
}
В ОС сімейства Windows NT\2000\XP) для копіювання файлів може використовуватися функція CopyFileEx(), яка надає ширші можливості з копіювання файлів.
24.8. Переміщення файла
Тепер розглянемо функцію MoveFile(), яка служить для переміщення файлів. Переміщення файла відрізняється від копіювання файла тільки тим, що старий файл після його переміщення видаляється.
Функція MoveFile() має наступний прототип:
BOOL MoveFile(
LPCTSTR lpExistingFileName, // ім’я існуючого файла
LPCTSTR lpNewFileName); // ім’я нового файла
У разі успішного завершення функція повертає ненульове значення, інакше - false. Відмітимо, що функція MoveFile() зберігає всі атрибути переміщуваного файла. Параметри цієї функції мають наступне призначення.
Параметр lpExistingFileName повинен вказувати на рядок, який містить ім’я переміщуваного файла.
Параметр lpNewFileName повинен вказувати на рядок з ім’ям файла, в який переміщатиметься існуючий файл. При цьому відмітимо, що новий файл створюється самою функцією MoveFile().
У лістингу 24.6 приведена програма, яка виконує переміщення файлу, використовуючи функцію MoveFile().
// Лістинг 24.6. Переміщення файла
#include "stdafx.h"
int main()
{
wchar_t lpszFileName[] = L"C:\\Users\\Shogun\\Documents\\demo_file.dat";
wchar_t lpszNewFileName[] = L"C:\\Users\\Shogun\\Documents\\new_file.dat";
// переміщаємо файл
if(!MoveFile(lpszFileName, lpszNewFileName))
{
std::cerr << "Move 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 moved." << std::endl;
std::cin.get();
return 0;
}
В ОС сімейства Windows NT\2000\XP) для переміщення файлів може також використовуватися функція MoveFileEx(), в якій можна задавати режими переміщення файлів.
