zoukankan      html  css  js  c++  java
  • File Split 1.0

     main.cpp

     1 #include <iostream>
     2 #include <fstream>
     3 #include <stdlib.h>
     4 #include <string>
     5 #include <windows.h>
     6 
     7 using namespace std;
     8 
     9 int main ( int argc, char* argv[] ) {
    10     if ( argc != 4 && argc != 5 ) {
    11         cout << "File Split 1.0" << endl;
    12         cout << "    Usage: fs <source file> <off begin> <off end> [<destination file>]" << endl;
    13         cout << "    e.g. fs app.exe 0 127 0_127.dat" << endl;
    14         cout << "    e.g. fs app.exe 0 127" << endl;
    15         return -1;
    16     }
    17     fstream src ( argv[1], ios::in | ios::binary | ios::ate );
    18     if ( src.is_open() ) {
    19         long long srcSize = static_cast<long long> ( src.tellg() );
    20         cout << "<source file> size: " << srcSize << " bytes" << "." << endl;
    21         long lgBegin = strtol ( argv[2], NULL, 10 );
    22         long lgEnd = strtol ( argv[3], NULL, 10 );
    23         std::ios_base::seekdir offBegin = static_cast<std::ios_base::seekdir> ( lgBegin );
    24         std::ios_base::seekdir offEnd = static_cast<std::ios_base::seekdir> ( lgEnd );
    25         if ( offBegin >= 0 && offEnd < srcSize && offBegin <= offEnd ) {
    26             string dstPath = "";
    27             if ( argc == 5 ) {
    28                 dstPath += argv[4];
    29             } else {
    30                 char buf[32];
    31                 dstPath += ltoa ( lgBegin, buf, 10 );
    32                 dstPath += "_";
    33                 dstPath += ltoa ( lgEnd, buf, 10 );
    34                 dstPath += ".bin";
    35             }
    36             cout << "Offsets with " << offBegin << " ~ " << offEnd << "." << endl;
    37             fstream dst ( dstPath.c_str(), ios::out | ios::binary | ios::trunc );
    38             if ( dst.is_open() ) {
    39                 src.seekg ( offBegin );
    40                 for ( int i = offBegin; i <= offEnd; i++ ) {
    41                     dst.put ( src.get() );
    42                 }
    43                 dst.flush();
    44                 dst.close();
    45                 src.close();
    46                 cout << "<destination file> expected size: " << offEnd - offBegin + 1 << " bytes" << "." << endl;
    47                 fstream chk ( dstPath.c_str(), ios::in | ios::binary | ios::ate );
    48                 if ( chk.is_open() ) {
    49                     long long chkSize = static_cast<long long> ( chk.tellg() );
    50                     chk.close();
    51                     cout << "<destination file> actual size: " << chkSize << " bytes" << "." << endl;
    52                     cout << "<destination file> state " << ( chkSize != offEnd - offBegin + 1 ? "bad" : "good" ) << "." << endl;
    53                 } else {
    54                     cout << "Can not open <destination file> file." << endl;
    55                     return -1;
    56                 }
    57                 cout << "File split completed." << endl;
    58                 return 0;
    59             } else {
    60                 src.close();
    61                 cout << "Can not create <destination file> file." << endl;
    62                 return -1;
    63             }
    64         } else {
    65             src.close();
    66             cout << "Invalid offsets. The allowed offsets is 0 ~ " << srcSize - 1 << "." << endl;
    67             return -1;
    68         }
    69     } else {
    70         cout << "Can not open <source file> file." << endl;
    71         return -1;
    72     }
    73 }

    附件1

  • 相关阅读:
    UNIX常用shell
    exit函数
    linux消息队列
    互斥量
    RCS版本控制
    linux samba
    UML建模
    linux syslog
    python基础-列表List及内置方法
    仿美团详情页与购物车源码-详情页
  • 原文地址:https://www.cnblogs.com/rms365/p/11003282.html
Copyright © 2011-2022 走看看