предлагаю так.
В интерфейсе запрашивается число частей (или разер части, что еще проще) и понеслись:
Открываем исходный файл в двоичном режиме и читаем его по байтикам(байтики считаем)
Открываем новый файл на запись. даем ему скажем расширение p00. И пишем туда байты из первго файла. Как только достигнут размер части, то закрываем файл p00 и создаем файл p01 скажем. Если достигнут конец исходного файла то заканчиваем запсись.
Можно даже формировать имя файла не отбрасывая исходное расширение а просто дописывая .p** Тогда ничего в первый файл дописывать не надо(число частей и все такое) Число частей вычисляется путем сканирования каталога и подсчетом частей существующих.
Ну а объединить части можно в обратном порядке.
Вот пример split
ifstream srcfile;
srcfile.open("src.src",ios::in|ios::binary);
int cntr;
char bytic;
ofstream dstfile;
dstfile.open("src.src.p00",ios::out|ios::binary);
while(1){
srcfile.read(&bytic,1);
if(srcfile.eof()) {dstfile.close(); break};
cntr++;
if(cntr==PartSize) {
dstfile.close();
dstfile.open("src.src.p01",ios::out|ios::binary);
cntr=0;
}
dstfile.write(&bytic,1);
};
srcfile.close();
где "src.src" - имя и расширение исходно файла
Здесь только не генерируется новое имя файла новой части, но это лего сделать. (т.е. максимум две части)
Добавлено: Да, еще забыл сказать что здесь использовались стандартные i/o классы C++
header <iostream.h> и <fstream.h> - ну это для тех кто не знает