Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <Windows.h>
- class oneMB {
- char empty_1[1000000];
- };
- int main() {
- setlocale(LC_ALL, "ru");
- std::fstream copyObject, pasteObject;
- std::string copyFile, pasteFile, fileName;
- long long int size, blockNumbers;
- int temp;
- std::cout << "Введите путь до файла и имя файла, который необходимо скопировать(с расширением): ";
- SetConsoleCP(1251);
- std::getline(std::cin, copyFile);
- SetConsoleCP(866);
- copyObject.open(copyFile, std::fstream::in | std::fstream::binary);
- if (!copyObject.is_open()) {
- std::cout << "Неверно указан путь или название файла" << std::endl;
- system("pause");
- return 0;
- }
- fileName = copyFile;
- for (int i = 0, j=0; i < copyFile.size(); i++,j++) {
- fileName[j] = copyFile[i];
- if (copyFile[i] == '\\') {
- j = -1;
- }
- temp = j;
- }
- fileName[temp+1] = '\0';
- copyObject.seekg(0, std::ios::end);
- size = copyObject.tellg();
- copyObject.seekg(0, std::ios::beg);
- if (size > 1000000) {
- for (int i = 1000;; i++) {
- if (size % i == 0) {
- blockNumbers = i;
- break;
- }
- }
- }
- else if (size > 1000 && size <= 10000) {
- for (int i = 10;; i++) {
- if (size % i == 0) {
- blockNumbers = i;
- break;
- }
- }
- }
- else if (size > 10000 && size <= 100000) {
- for (int i = 100;; i++) {
- if (size % i == 0) {
- blockNumbers = i;
- break;
- }
- }
- }
- else {
- blockNumbers = 1;
- }
- int val = size / blockNumbers;
- std::cout << "Введите путь, куда необходимо скопировать файл: ";
- SetConsoleCP(1251);
- std::getline(std::cin, pasteFile);
- SetConsoleCP(866);
- if (pasteFile == copyFile) {
- std::cout << "Одинаковые директории и названия файлов." << std::endl;
- system("pause");
- return 0;
- }
- if (pasteFile[pasteFile.size()] != '\\') {
- pasteFile += '\\';
- }
- pasteFile = pasteFile + fileName;
- pasteObject.open(pasteFile, std::fstream::out | std::fstream::app | std::fstream::binary);
- if (!pasteObject.is_open()) {
- std::cout << "Ошибка при вводе директории" << std::endl;
- system("pause");
- return 0;
- }
- oneMB obj;
- int onePartOfFile = blockNumbers / 100;
- int partOfFile = onePartOfFile;
- int count = 0;
- for (int i = 0; i < blockNumbers; i++) {
- if (blockNumbers != 1) {
- if (i == 0 || i == partOfFile) {
- system("cls");
- std::cout << "Процесс копирования завершен на " << count++ << "%";
- if (count > 100) {
- count = 100;
- }
- partOfFile += onePartOfFile;
- }
- }
- else {
- std::cout << "100%";
- }
- copyObject.read((char*)&obj, size / blockNumbers);
- pasteObject.write((char*)&obj, size / blockNumbers);
- }
- system("cls");
- std::cout << "Процесс копирования завершен на 100%" << std::endl;
- copyObject.close();
- pasteObject.close();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment