daily pastebin goal
13%
SHARE
TWEET

cpp_cp example

a guest Sep 26th, 2018 70 in 7 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. //  Размер буфера
  5. #define BUF_SIZE    32
  6.  
  7. //  Коды возвращаемые программой
  8. #define RC_OK   0
  9. #define RC_OPEN_ERROR   1
  10. #define RC_READ_ERROR   2
  11. #define RC_WRITE_ERROR  3
  12.  
  13. using   namespace   std;    //  Чтобы не писать каждый раз std::
  14.  
  15. //  Прототипы функций
  16. int copy_file( ifstream* src, ofstream* dst );
  17.  
  18. int main( int argc, char* argv[] )
  19. {
  20.     int retcode = RC_OK;    //  Код возвращения программы
  21.     ifstream    src;    //  Источник
  22.     ofstream    dst;    //  Приемник
  23.  
  24.     if( argc > 2 )
  25.     {
  26.         //  Открывем файлы в режиме двоичного доступа, чтобы
  27.         //  избежать возможного изменения символов
  28.         src.open( argv[1], ios_base::in|ios_base::binary );
  29.         if( src )
  30.         {
  31.             cout << "Открыт файл " << argv[1] << endl;
  32.             dst.open( argv[2], ios_base::out|ios_base::binary );
  33.             if( dst )
  34.             {
  35.                 cout << "Открыт файл " << argv[2] << endl;
  36.                 //  Работаем
  37.                 retcode = copy_file( &src, &dst );
  38.             }
  39.             else
  40.             {
  41.                 cout << "Не удалось открыть файл " <<
  42.                     argv[2] << endl;
  43.                 //  Закроем файл src
  44.                 src.close();
  45.                 retcode = RC_OPEN_ERROR;
  46.             }
  47.         }
  48.         else
  49.         {
  50.             cout << "Не удалось открыть файл " << argv[1] << endl;
  51.             //  Программа возвратит код ошибки  
  52.             retcode = RC_OPEN_ERROR;
  53.         }
  54.     }
  55.     else
  56.     {
  57.         cout << "Использование: cpp_cp <src_file> <dst_file>" << endl;
  58.     }
  59.  
  60.     return  retcode;
  61. }
  62. //-------------------------------------------------------------------
  63. int copy_file( ifstream* src, ofstream* dst )
  64. {
  65.     int rc = RC_OK; //  Код возвращаемый программой
  66.     char    buf[ BUF_SIZE ];
  67.     size_t  n;
  68.     size_t  count = 0;
  69.  
  70.     while( !src->eof() )
  71.     {
  72.         //  Считаем данные в буфер
  73.         src->read( buf, BUF_SIZE );
  74.         //  Если считывание прошло удачно, то можно записать
  75.         //  данные в выходной файл
  76.         if( src->bad() )
  77.         {
  78.             cout << "Ошибка чтения из файла!" << endl;
  79.             rc = RC_READ_ERROR;
  80.             break;
  81.         }
  82.         else
  83.         {
  84.             //  Узнаем, сколько символов считано
  85.             n = src -> gcount();
  86.             if( n )
  87.             {
  88.                 //  если мы что-то считали, то попробуем
  89.                 //  это записать в выходной файл
  90.                 dst->write( buf, n );
  91.                 //  Проверим, не возникла ли ошибка
  92.                 if( dst->bad() )
  93.                 {
  94.                     cout << "Ошибка чтения из файла!"
  95.                         << endl;
  96.                     rc = RC_WRITE_ERROR;
  97.                     break;
  98.                 }
  99.                 else
  100.                 {
  101.                     count = count + n;
  102.                 }
  103.             }
  104.         }
  105.     }
  106.  
  107.     if( rc == RC_OK )
  108.     {
  109.         cout << count << " байт скопировано" << endl;
  110.     }
  111.  
  112.     return  rc;
  113. }
  114. //-------------------------------------------------------------------
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top