Initial
This commit is contained in:
116
parts/main.cpp
Normal file
116
parts/main.cpp
Normal file
@@ -0,0 +1,116 @@
|
||||
#include <common/windows.hpp>
|
||||
#include <common/array.hpp>
|
||||
#include <common/string.hpp>
|
||||
#include <common/winsvc.hpp>
|
||||
#include <common/file.hpp>
|
||||
|
||||
#define MAX_BYTES 64000000
|
||||
#define BUF_SIZE 1024000
|
||||
|
||||
void combine();
|
||||
void divide(const String &pathFileName);
|
||||
|
||||
void main(int argc,char ** argv)
|
||||
{
|
||||
String command;
|
||||
|
||||
if(argc<2)
|
||||
{
|
||||
::printf("USAGE parts {divide[filename]|combine} {filename} ** if combine then filename \n");
|
||||
return;
|
||||
}
|
||||
command=argv[1];
|
||||
|
||||
if(command=="divide")
|
||||
{
|
||||
if(argc!=3)
|
||||
{
|
||||
::printf("USAGE parts {divide[filename]|combine} {filename} ** if combine then filename \n");
|
||||
return;
|
||||
}
|
||||
divide(argv[2]);
|
||||
}
|
||||
else if(command=="combine")combine();
|
||||
else ::printf("unknown command\n");
|
||||
}
|
||||
|
||||
void combine()
|
||||
{
|
||||
Array<BYTE> bytes;
|
||||
File inFile;
|
||||
File outFile;
|
||||
DWORD part=0;
|
||||
DWORD readCount=0;
|
||||
String strPathFileName;
|
||||
|
||||
if(!outFile.open("result.dat","wb"))
|
||||
{
|
||||
::printf("unable to open output 'result.dat'\n");
|
||||
return;
|
||||
}
|
||||
bytes.size(BUF_SIZE);
|
||||
while(true)
|
||||
{
|
||||
::sprintf(strPathFileName,"part_%d.dat",part);
|
||||
if(!inFile.open(strPathFileName,"rb"))
|
||||
{
|
||||
::printf("unable to open %s\n",strPathFileName.str());
|
||||
return;
|
||||
}
|
||||
::printf("Reading %s\n",strPathFileName.str());
|
||||
while(0!=(readCount=inFile.read((char*)&bytes[0],bytes.size())))
|
||||
outFile.write((char*)&bytes[0],readCount);
|
||||
inFile.close();
|
||||
part++;
|
||||
}
|
||||
}
|
||||
|
||||
void divide(const String &strPathInput)
|
||||
{
|
||||
Array<BYTE> bytes;
|
||||
DWORD part=0;
|
||||
DWORD count=0;
|
||||
DWORD byteCount=0;
|
||||
DWORD totalCount=0;
|
||||
String strPathFileName;
|
||||
File inFile;
|
||||
File outFile;
|
||||
|
||||
bytes.size(BUF_SIZE);
|
||||
if(!inFile.open(strPathInput,"rb"))
|
||||
{
|
||||
::printf("Cannot open input\n");
|
||||
return;
|
||||
}
|
||||
::sprintf(strPathFileName,"part_%d.dat",part);
|
||||
if(!outFile.open(strPathFileName,"wb"))
|
||||
{
|
||||
::printf("cannot open output '%s'\n",strPathFileName.str());
|
||||
return;
|
||||
}
|
||||
while(true)
|
||||
{
|
||||
if(count>MAX_BYTES)
|
||||
{
|
||||
outFile.close();
|
||||
part++;
|
||||
::sprintf(strPathFileName,"writing 'part_%d.dat'",part);
|
||||
if(!outFile.open(strPathFileName,"wb"))
|
||||
{
|
||||
::printf("cannot open output '%s'\n",strPathFileName.str());
|
||||
return;
|
||||
}
|
||||
count=0;
|
||||
}
|
||||
byteCount=inFile.read((char*)&bytes[0],bytes.size());
|
||||
if(!byteCount)break;
|
||||
if(!outFile.write(&bytes[0],byteCount))
|
||||
{
|
||||
::printf("Unable to write to '%s'\n",strPathFileName.str());
|
||||
return;
|
||||
}
|
||||
count+=byteCount;
|
||||
totalCount+=byteCount;
|
||||
// if(!(totalCount%BUF_SIZE))::printf("Wrote %d bytes to %s\n",totalCount,strPathFileName.str());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user