Скопируйте блок файла на блок в C - PullRequest
2 голосов
/ 28 мая 2011

Я пытаюсь разделить файл на количество блоков x размером y (в байтах), чтобы я мог скопировать каждый блок по отдельности.Как я могу это сделать?

Ответы [ 3 ]

4 голосов
/ 28 мая 2011

Попробуйте использовать Фред

char buffer[ysize];
fread(buffer, ysize, 1, fp);

Каждый раз, когда вы читаете байты ysize в буфере из файла.

1 голос
/ 28 мая 2011

В некоторых структурах struct stat есть дополнительные члены, которые оказываются полезными при копировании файлов:

     st_blksize  The optimal I/O block size for the file.

     st_blocks   The actual number of blocks allocated for the file in
                 (check local system).

Если размер блока, который вы читаете, даже кратен st_blksize, вы стремитесь получить более эффективное чтение файла,

   size_t   desiredSize = 1E4;                // largest buffer size to read into
   size_t   blocks = desiredSize / st.st_blksize;
   if ( blocks < 1 )              // fail safe test
       blocks = 1;
   size_t   true_size = blocks * st.st_blksize;     // this is the size to read
   char *buffer = malloc(true_size);

Сбой st_blksize,предоставляет макрос BUFSIZ для размера буфера.

0 голосов
/ 28 мая 2011
x = fopen ( "x" , "rb");
if (x==NULL) {perror("file could not be opened"); exit(1);}

y = fopen ( "y" , "wb");
if (x==NULL) {perror("file could not be opened"); exit(1);}

char* buf = (char*) malloc (sizeof(char)*1024); //1024 is buffer size

Чтобы прочитать 1024 символа в буфер:

fread(buf, sizeof(char), 1024, x);

Вы делаете все остальное.

...