Пример программы копирования файла на С/С++
#include <iostream>
#include <windows.h>
#include <io.h>
#include <stdio.h>
using namespace std;
//Функция, выводящая на экран строку
void RussianMessage(char* str) {
char message[100];
//перевод строки из кодировки Windows
//в кодировку MS DOS
//CharToOem(str, message);
cout << message;
}
//Функция копирования файла
bool CopyFile(char* source, char* destination) {
const int size = 65536;
FILE* src, * dest;
//Открытие Файла
if (!(src = fopen(source, "rb"))) {
return false;
}
//Получение дескриптора файла
int handle = _fileno(src);
//выделение памяти под буффер
char* data = new char[size];
if (!data) {
return false;
}
//Открытие файла, куда будет производиться копирование
if (!(dest = fopen(destination, "wb"))) {
delete[]data;
return false;
}
int realsize;
while (!feof(src)) {
//Чтение данных из файла
realsize = fread(data, sizeof(char), size, src);
//Запись данных в файл
fwrite(data, sizeof(char), realsize, dest);
}
//Закрытие файлов
fclose(src);
fclose(dest);
return true;
}
void main() {
setlocale(LC_ALL, "Russian");
//MAX_PATH - Константа, определяющая
//максимальный размер пути.
//Даная константа содержится в stdlib.h
char source[_MAX_PATH];
char destination[_MAX_PATH];
char answer[20];
//RussianMessage('\nВведите путь и название копируемого файлу:\n');
cout << "\nВведите путь и название копируемого файлу : \n";
//Получение пути к первому файлу
cin.getline(source, _MAX_PATH);
//Проверка Существует ли файл
if (_access(source, 00) == -1) {
//RussianMessage("\nУказан неверный путь или название файла\n");
cout << "\nУказан неверный путь или название файла\n";
return;
}
//RussianMessage('\nВведите путь и название нового файла:\n');
//Получение пути к второму файлу
cin.getline(destination, _MAX_PATH);
//Проверка на существование файла
if (_access(destination, 00) == 0) {
//RussianMessage("\nТакой Файл уже существует перезаписать его(1 - Да /2 - Нет)?\n");
cout << "\nТакой Файл уже существует перезаписать его(1 - Да /2 - Нет)?\n";
cin.getline(answer, 20);
if (!strcmp(answer, "2")) {
//RussianMessage("\nОперация отменена\n");
cout << "\nОперация отменена\n";
return;
}
else if (strcmp(answer, "1")) {
//RussianMessage("\nНеправильный ввод\n");
cout << "\nНеправильный ввод\n";
return;
}
if (_access(destination, 02) == -1) {
//RussianMessage("\nНет доступа к записи.\n");
cout << "\nНет доступа к записи.\n";
//return;
}
}
//Копирование файла
if (!CopyFile(source, destination)) {
//RussianMessage("\nОшибка при работе с файлом\n");
cout << "\nОшибка при работе с файлом\n";
}
}