Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
36
Добавлен:
18.05.2015
Размер:
1.91 Кб
Скачать
#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;
}

Соседние файлы в папке Lab1_5-12IT3-Divin