1.操作文件
文件拆分
JNIEXPORT void JNICALL functionName(JNIEnv *env, jclass jcld, jsting pstring, jstring mstring, jint file_num){
// 将路径转化成char* c可以处理的字符串
const char* pstr = (*env)->GetStringUTFChars(env, pstring, NULL);
const char* mstr = (*env)->GetStringUTFChars(env, mstring, NULL);
// 得到分割之后的子文件的路径列表
char ** mstrs = malloc(sizeof(char*)*file_num);
int i = 0;
for (; i < file_num; i++) {
mstrs[i] = malloc(sizeof(char) * 100);
}
// 不断读取path文件, 循环file_num 个文件中
int file_size = get_file_size(pstr); // 获取源文件的文件大小
FILE *fpr = open(path, "rb");
// 文件个数
if (file_size % file_num == 0) {
// 单个文件大小
int part = file_size / file_num;
i = 0;
//
for (; i < file_num; i++) {
FILE *fpw = open(strs[i]);
int j = 0;
for (; j < part; j++) {
fputc(get(fpr), fpw);
}
close(fpr);
}
} else {
// 不整除
// 单个文件大小
int part = file_size / (file_num - 1);
i = 0;
//
for (; i < file_num - 1; i++) {
FILE *fpw = open(strs[i]);
int j = 0;
for (; j < part; j++) {
fputc(get(fpr), fpw);
}
close(fpr);
}
// 最后一个
FILE *fpw = open(patches[file_num]-1, 'wb');
i = 0;
for (; I < filesize % (file_num - 1); i++) {
fputc(fget(fpr), fpw);
}
fclose(fpw);
}
close(fpr);
// 释放字符串
i = 0;
for (; i < file_num; i++) {
free(mstrs[i]);
}
free(mstrs);
(*env)->RelesaeStringUTFChars(env, pstring, pstr);
(*env)->RelesaeStringUTFChars(env, mstring, mstr);
}
// 获取文件大小
int get_file_size(char *path){
File *fp = fopen(path, "rb");
fseek(fp, 0, SEEK_END);
return ftell(fp);
}
文件合并
JNIEXPORT void JNICALL 方法名称(JNIEnv *env, jclass jcls, jstring pstring, jint fcount, jstring totalstr){
// 合并之后的文件
const char *merge_path = (*env)->GetStringUTFChars(env, totalstr, NULL);
// 分割字文件
const char *pattern_path = (*env)->GetStringUTFChars(env, pstring, NULL);
// 得到分割的子文件的路径列表
char **patches = malloc(sizeof(char*) * fcount);
int i = 0;
for (; i < fcount; i++) {
patches[I] = malloc(sizeof(char) * 100);
}
FILE *fpw = open(merge_path);
i = 0;
for (; i < file_num; i++) {
//每个文件的大小
int filesize = get_file_size(patches[i]);
FILE *fpr = open(patches[I], "rb");
int j= 0;
for (; j<filesize; j++) {
fputc(fgetc(), fpw);
}
fclose(fpr);
}
fclose(fpw);
}
文件处理使用diff和pach