dạ em có bài tập làm file splitter joiner, em viết hàm split và test thử với 1 file MP4 thì n-1 part đầu ok, còn part cuối lúc nào cũng ko xem được, anh chị nào có kinh nghiệm có thể giải thích cho em được ko ạ đây là hàm split của em
void split_F(const char* file_name, int number_of_part)
{
FILE *fp_read = fopen(file_name, "rb");
//calculate file size
int file_size;
fseek(fp_read, 0L, SEEK_END);
file_size = ftell(fp_read);
rewind(fp_read); //reset file pointer
//calculate number of parts
//int number_of_part = (int)ceil((double)file_size / size_of_part);
long size_of_part;
size_of_part = (int)floor((double)file_size / number_of_part);
cout << "Total files after split: " << number_of_part << endl
<< "...Processing..." << endl;
//main process
char name[255] = "";
//split first n-1 part
for (int count = 1; count <= number_of_part; count++)
{
sprintf(name, "%s.part_%03d", file_name, count);
FILE *fp_write = fopen(name, "wb");
//create buffer
char *buffer = new char[size_of_part];
memset(buffer, NULL, size_of_part); //reset buffer
fread(buffer, size_of_part, 1, fp_read);
fwrite(buffer, size_of_part, 1, fp_write);
fseek(fp_read, count*size_of_part, SEEK_SET);
cout << "> File: " << name << " done babe!" << endl;
delete[] buffer;
fclose(fp_write);
}
fclose(fp_read);
}