Я пытаюсь разбить файл на несколько меньших файлов. Проблема в том, что размер (который пользователь дает) больше, чем буфер, программа сработает, в противном случае она работает нормально. Может ли кто-нибудь помочь? Вот код:Как разбить файл на несколько файлов в C?
char * buffer = (char *)malloc(400);
FILE *exsistingFile = fopen(filename,"rb");
do
{
/*reading from a file */
bytesRead = fread(buffer, sizeof(char), size, exsistingFile);
/*exits if its 0 */
if (bytesRead == 0)
{
printf("The reading has finished or the file has no data inside\n");
return 0;
}
fileCount ++;
sprintf (newFileName,"%s%04i",output,fileCount);
/* opening the new file bye the name given by the user */
outputFile = fopen(newFileName,"w");
/*checking whether the file is opened or not*/
if (!outputFile)
{
printf("File %s cannot be opened for reading\n", filename);
return E_BAD_DESTINATION;
}
/*write to file from the buffer*/
fwrite(buffer,sizeof(char),bytesRead,outputFile);
/*closing the output file*/
fclose(outputFile);
} while (bytesRead > 0);
По крайней мере, для текстовых файлов я бы циклически читал строки за строкой (например, используя [getline (3)] (http://man7.org/linux/man-pages/man3/getline.3.html). ..). У BTW Linux и Posix есть [split (1)] (http://man7.org/linux/man-pages/man1/split.1.html) и [csplit (1)] (http://man7.org/ linux/man-pages/man1/csplit.1.html). Вы можете использовать их или изучать исходный код, поскольку это бесплатное программное обеспечение. –
Ваш открытый для записи не работает, поэтому вы выводите сообщение о том, что входной файл не может быть прочитан ???? – user3629249
простое исправление, буфер malloc с использованием размера, а не фиксированное значение 400 – user3629249