{{{//============================================================================ // Name : ChoboSplit.cpp // Author : chobocho.com // Version : v0.011 // CopyLeft // Description : File Split // Date : 2010. 10. 28 //============================================================================ #include #include using namespace std; #define _10MB (10*1024*1024) class CSplit { public: CSplit(); ~CSplit(); bool split(char *fileName); void make_batch_file (char *fileName, int count); private: fstream source_fp; fstream target_fp; }; CSplit::CSplit() { } CSplit::~CSplit() { source_fp.close(); target_fp.close(); } bool CSplit::split(char *fileName) { int nof_target = 0; int count = 0; int read_size = 8192; char buffer[8192]; string target_filename = fileName; target_filename += ".sh"; source_fp.open(fileName, ios::binary|ios::in); target_fp.open(target_filename.c_str(), ios::binary|ios::out|ios::trunc); if (!source_fp) { cout << "Error : Can't find " << fileName << " !!" << endl; return false; } source_fp.seekg(0, ios_base::end); long source_filesize = source_fp.tellg(); cout << "source file size : " << source_filesize << endl; // 10MB 이하의 파일은 분할 할 필요가 없음 if ( source_filesize <= _10MB ) { cout << "No need to split!" << endl; source_fp.close(); return false; } source_fp.seekg(ios_base::beg); if (!target_fp) { cout << "Error : Can't open target file !!" << endl; return false; } while(( !source_fp.eof() )&& (source_filesize > 0) ) { memset(buffer, 0, 8192); if (source_filesize < read_size) { read_size = source_filesize; } source_fp.read( buffer, read_size ); target_fp.write( buffer, read_size ); count += read_size; source_filesize -= read_size; if (count >= _10MB) { count = 0; target_fp.close(); cout << "Make " << nof_target+1 << " file!" <= 2) { mySplit.split(argv[1]); } cout << "!!!End!!!" <