Периодическое копирование файлов в C++ с паузой


Данная запись является заметкой на полях. Может быть, кто-то и почерпнет из неё что-то полезное, но для меня это просто заметка. Эта заметка будет являться частью программы, которая будет копировать файлы с некоторой целью. Но об этом позднее.

Итак, что делает наша программа? Она берет файл, проверяет его на существование (ошибкой открытия) и копирует его. Все это выполняется циклом 15 раз, причем с задержкой в 20 секунд. Перейдем непосредственно к тексту программы:

#include <fstream>
#include <iostream>
#include <windows.h>
using namespace std;
 
int main(){

   for (int i = 0; i < 15; i++) {
    char * buffer;
    int len = 4096;
    ifstream infile("1.txt", ios::in | ios::binary);
    ofstream outfile("C:\\rab\\1.txt", ios::out | ios::binary);
    if(!infile || !outfile){ 
        cout << "Unable to open the file...\n";
        return 1;
    }
    buffer = new char[len];
    while (!infile.eof()){
        infile.read(buffer, len);
        if(infile.gcount()) outfile.write(buffer, infile.gcount());
    }
    infile.close();
    outfile.close();
    delete[] buffer;
	Sleep(20000);
   }
    return 0;
}
Теперь разберем код нашей программы построчно. 1-4 - подключение пространства имен и других полезных вещей. В 10 строке определяется размер буфера; вы его можете изменить на другое значение. В 13 строке делаем проверку на ошибку открытия файла - может вы неправильно задали его в строке 12. Функция .gcount() позволяет определить число байт, которое мы считали в последний раз. Именно она и применяется для проверки считывания, а также для установки числа записываемых байт. В строках 22-23 не забудем закрыть файлы.

Есть еще некоторая особенность в нашей программе Цикл (8 строка) выполняется 15 раз. Задержка - 25 строка (специально для этой функции подключаем windows.h в 3-ей строке) - составляет 20 секунд. Таким образом, программа будет копировать файл 1.txt, который располагается в текущей директории в файл "C:\\rab\\1.txt" через каждые 20 секунд 15 раз.

Программа компилировалась на Microsoft Visual Studio 2010. Кстати, если у вас именно такая рабочая среда и возникают разнообразные ошибки при компилировании, совершенно нелогичные и непонятные, то от большинства проблем можно избавиться установкой sp1 для этой среды.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си плюс плюс, файл




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 13. Математические операторы присваивания
Эффективная программа для получения всех простых множителей заданного числа на PHP
Урок 28. Цикл foreach C#