30/09/2018, 16:55
[Thao tác với FILE trong C] cần lắm 1 người giải thích
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);
}
Bài liên quan
cái ghi chú split n-1 part là do nãy em mới test việc ghi riêng part cuối ạ :v nói chung là coi như ko có dòng ghi chú đó nha anh/chị, kẻo hiểu lầm hehe
mod @ltd có thể close topic dùm em được ko ạ
xong rồi hả …
bạn chia sẽ cách giải quyết luôn, các bạn sau này vào không phải vướng mắc nữa
OK, sau 1 hồi tìm hiểu thì mình nhận ra là cái file MP4 là một kiểu dữ liệu có cấu trúc nên nó sẽ có phần header chứa các thông tin cần thiết để play được. Khi mà tách file ra thì chỉ có part 1 có cái header đó nên các part sau không xem được code cho bạn nào cần (nếu gặp phải bài này)
}
ông nội Phi đó hả :v
thật ra cái mình hỏi cũng ko liên quan lắm :v chỉ là hiểu lầm cái kết quả
Tưởng bạn join tất cả lại rồi mới xem hình chứ
lúc đầu mình tưởng là split nó ra vẫn xem được từng phần =))
làm được rồi chứ sao…