Копирование и перемещение файлов

BOOL CopyFile(

LPCTSTR lpExistingFileName, //имя существующего файла

LPCTSTR lpNewFileName, // имя нового файла

BOOL bFailIfExists // действия в случае существования файла

);

BOOL MoveFile(

LPCTSTR lpExistingFileName, //имя существующего файла

LPCTSTR lpNewFileName, // имя нового файла

);

Листинг 1. Пример приложения, создающего файл для записи в него данных.

#include <windows.h>

#include <iostream.h>

int main()

{

HANDLE hFile;

// создаем файл для записи данных

hFile = CreateFile(

"C:\\demo_file.dat", // имя файла

GENERIC_WRITE, // запись в файл

0, // монопольный доступ к файлу

NULL, // защиты нет

CREATE_NEW, // создаем новый файл

FILE_ATTRIBUTE_NORMAL, // обычный файл

NULL // шаблона нет

);

// проверяем на успешное создание

if (hFile == INVALID_HANDLE_VALUE)

{

cerr << "Create file failed." << endl

<< "The last error code: " << GetLastError() << endl;

cout << "Press any key to finish.";

cin.get();

return 0;

}

// пишем данные в файл

for (int i = 0; i < 10; ++i)

{

DWORD dwBytesWrite;

if (!WriteFile(

hFile, // дескриптор файла

&i, // адрес буфера, откуда идет запись

sizeof(i), // количество записываемых байтов

&dwBytesWrite, // количество записанных байтов

(LPOVERLAPPED)NULL // запись синхронная

))

{

cerr << "Write file failed." << endl

<< "The last error code: " << GetLastError() << endl;

CloseHandle(hFile);

cout << "Press any key to finish.";

cin.get();

return 0;

}

}

// закрываем дескриптор файла

CloseHandle(hFile);

cout << "The file is created and written." << endl;

return 0;

}

Листинг 2. Исходный код приложения, позволяющее выбрать действие над файлом: создание, открытие, удаление, запись и чтение данных, копирование и перемещение файлов.

#include <windows.h>

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{

int iMenu;DWORD dwBytesWrite;

char cMenu[200]="Выбрать:\n1 - СОЗДАТЬ ФАЙЛ\n2 - ОТКРЫТЬ ФАЙЛ\n3 - УДАЛИТЬ ФАЙЛ\n4 - ЗАПИСАТЬ ДАННЫЕ В ФАЙЛ\n5 - ПРОЧИТАТЬ ДАННЫЕ ИЗ ФАЙЛА\n6 - КОПИРОВАТЬ ФАЙЛ\n7 - ПЕРЕМЕСТИТЬ ФАЙЛ\n8 - ВЫЙТИ\n";

CharToOem(cMenu, cMenu);

while(1)

{

system("cls");

cout << cMenu; cin >> iMenu;

switch(iMenu)

{

HANDLE hFile;

char buf[50],buf1[50];

case 1:

CharToOem("СОЗДАТЬ ФАЙЛ:\nИмя файла?\n", buf); cout << buf;

cin >> buf;

hFile = CreateFile(buf,GENERIC_WRITE, 0,NULL,CREATE_NEW, FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile == INVALID_HANDLE_VALUE)

{

cerr << "Create file failed." << endl

<< "The last error code: " << GetLastError();

cout << "\nPress any key to finish.";

getch();

break;

}

cout << "The file is created." << endl;

CloseHandle(hFile);

getch();

break;

case 2:

CharToOem("ОТКРЫТЬ ФАЙЛ:\nИмя файла?\n", buf); cout << buf;

cin >> buf;

hFile = CreateFile(buf,GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile == INVALID_HANDLE_VALUE)

{

cerr << "Open file failed." << endl

<< "The last error code: " << GetLastError();

cout << "\nPress any key to finish.";

getch();

break;

}

cout << "The file is opened." << endl;

CloseHandle(hFile);

getch();

break;

case 3:

CharToOem("УДАЛИТЬ ФАЙЛ:\nИмя файла?\n", buf); cout << buf;

cin >> buf;

if (!DeleteFile(buf))

{

cerr << "Delete file failed." << endl

<< "The last error code: " << GetLastError();

cout << "\nPress any key to finish.";

getch();

break;

}

cout << "The file is deleted." << endl;

getch();

break;

case 4:

CharToOem("ЗАПИСАТЬ ДАННЫЕ В ФАЙЛ:\nИмя файла?\n", buf); cout << buf;

cin >> buf;

hFile = CreateFile(buf,GENERIC_WRITE,0,NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile == INVALID_HANDLE_VALUE)

{

cerr << "Creat file failed." << endl

<< "The last error code: " << GetLastError();

cout << "\nPress any key to finish.";

getch();

break;

}

cout << "The file is opened." << endl;

CharToOem("Введите данные!\n", buf); cout << buf;

cin >> buf;

if (!WriteFile(hFile,&buf,sizeof(buf),&dwBytesWrite,
(LPOVERLAPPED)NULL))

{

cerr << "Write file failed." << endl

<< "The last error code: " << GetLastError();

CloseHandle(hFile);

cout << "\nPress any key to continue.";

getch();

break;

}

cout << "The Information is written." << endl;

CloseHandle(hFile);

getch();

break;

case 5:

CharToOem("ЧТЕНИЕ ДАННЫХ ИЗ ФАЙЛА:\nИмя файла?\n", buf); cout << buf;

cin >> buf;

hFile = CreateFile(buf,GENERIC_READ,0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile == INVALID_HANDLE_VALUE)

{

cerr << "Open file failed." << endl

<< "The last error code: " << GetLastError();

cout << "\nPress any key to finish.";

getch();

break;

}

cout << "The file is opened." << endl;

if (!ReadFile(hFile,&buf,sizeof(buf),&dwBytesWrite, (LPOVERLAPPED)NULL))

{

cerr << "Read file failed." << endl

<< "The last error code: " << GetLastError();

CloseHandle(hFile);

cout << "\nPress any key to continue.";

getch();

break;

}

if(!dwBytesWrite) cout << "The file is empty" << endl;

else cout << "Read information:"<< buf << endl;

CloseHandle(hFile);

getch();

break;

case 6:

CharToOem("КОПИРОВАНИЕ ФАЙЛОВ:\nИмя файла источника?\n", buf); cout << buf;cin >> buf;

CharToOem("Имя нового файла?\n", buf1); cout << buf1;cin >> buf1;

if(!CopyFile(buf,buf1,true))

{

cerr << "Move file failed. The last error code: " << GetLastError();

cout << "\nPress any key to continue.";

getch();

break;;

};

cout << "The file is copied."<< endl;

getch();

break;

case 7:

CharToOem("ПЕРЕМЕЩЕНИЕ ФАЙЛОВ:\nИмя файла источника?\n", buf); cout << buf;cin >> buf;

CharToOem("Имя нового файла?\n", buf1); cout << buf1;cin >> buf1;

if(!MoveFile(buf,buf1))

{

cerr << "Move file failed. The last error code: " << GetLastError();

cout << "\nPress any key to continue.";

getch();

break;;

};

cout << "The file is moved."<< endl;

getch();

break;

case 8: return 0;

}

}

}

Задание на выполнение

1. Набрать программу которая приведена в листинге 1. Ознакомиться с работой функций CreateFileи WriteFile,протестировать работу программы при разных значениях параметров для данных функций.

2. Написать программу в которой были бы реализованы следующие функции работы с файлами:

− создание файла;

− открытие файла;

− удаление файла;

− запись данных в файл, данные вводятся с клавиатуры;

− чтение данных из файла;

− копирование фала;

− перемещение файла.

Выбор функции организовать в виде меню, пути до файлов вводить с клавиатуры. Ознакомится с основными параметрами данных функций, исследовать их работу при изменении основных параметров.

Контрольные вопросы

1. Какая функция используется при создании или открытии файла? Поясните значения ее параметров.

2. Какие функции можно использовать для записи данных файл и чтения из файла?

3. Какую функцию выполняет данный оператор: hIn=CreateFile(argv [1], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0,NULL)?

4. Поясните, какую функцию выполняет данный оператор: hOut=CreateFile(argv[2], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL).

5. Поясните, какую функцию выполняет данный оператор: while (ReadFile(hIn, Buffer, BUF_SIZE, &nIn, NULL) && nIn > 0).

6.Какую функцию выполняет данный оператор: WriteFile (hOut,Buffer, nIn, &nOut, NULL)?

7. Поясните, какую функцию выполняет данный оператор: if(!СopyFile(argv[1],argv[2],FALSE)).

Лабораторная работа №9

Тема: Работа атрибутами файлов с помощью Win32 API функций

Цель работы:

1. Изучение основных функций Win32API, используемых для определения и изменения атрибутов файлов.

2. Разработка приложения, демонстрирующего просмотр и изменение атрибутов файла.

Краткое теоретическое введение

Наши рекомендации