Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Lab1_5-12IT3-Divin / find
.h#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
long file_size(const char* filename)//вернёт размер файла
{
size_t len = 0;
FILE *file = fopen(filename, "r");
fseek(file, 0L, SEEK_END);
len = ftell(file);
fclose(file);
return len;
}
char* split_file(char *filename, int num, int param)
{
if (param >= num)
{
printf("Incorrect number of chunk...");
return NULL;
}
int chunk_size = (long)(file_size(filename) / num);
char *result = (char*)calloc(1024, sizeof(char));
for(int n = 0; n < num; n++)
{
FILE *file = NULL, *file1 = NULL;
file = fopen(filename, "r");
if (!file) // ïðîâåðêà íà óäà÷íîå îòêðûòèå
{
return NULL;
}
long nach = chunk_size*n; //n ÷àñòü ïîòîêà
fseek(file,nach, SEEK_SET);
char *part = (char *)calloc(strlen(filename)+7, sizeof(char)); //âûäåëÿåì ïàìÿòü ïîä èìÿ êóñêà ôàéëà
char num[2];
sprintf(num, "%d", n); //çàïèñûâàåì â ñòðîêó num íîìåð êóñêà ôàéëà
strcpy(part, filename); //çàïèñü èìåíè îñíîâíîãî ôàéëà
part = strcat(part, num); //çàïèñü â êîíåö íîìåðà êóñêà ôàéëà
file1 = fopen(part, "w");
if (!file1) // ïðîâåðêà íà óäà÷íîå îòêðûòèå
{
return NULL;
}
if (n == param) //åñëè ñåé÷àñ ðàáîòàåì ñ êóñêîì ôàéëà êîòîðûé òðåáóåò êëèåíò(êîòîðûé íóæíî âåðíóòü)
{
strcpy(result, part); //òî ïðèñâàåâàåì ïåðåìåííîé result èìÿ ôàéëà(íóæíîãî êóñêà ôàéëà)
}
for (int i = 0; i < chunk_size; i++)
{
char ch;
fscanf(file, "%c", &ch);
fprintf(file1, "%c", ch);
}
fclose(file);
fclose(file1);
}
return result;
}