当你想要块中的元素时,fread是否有效?

时间:2016-11-15 20:25:41

标签: c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#pragma warning(disable:4996)

size_t file_size(FILE *fd){
    if (fd == NULL) {
        printf("File not found");
        return -1;
    }
    fseek(fd, 0, SEEK_END);    
    return ftell(fd);
}

int main() {
    FILE *in;
    FILE *out;

    char buffer[2] = { 0 };
    int n = 0;
    in = fopen("test.txt", "rb");
    if (in == NULL) {
        printf("cona\n"); return -1;
    }

    out = fopen("out.txt", "wb");
    if (out == NULL) {
        printf("cona1\n"); return -1;
    }

    size_t size = file_size(in);
    for(n = 0; n < size; n += 2){
        if (fread(&buffer, sizeof(char), 2, in) !=2) {
            printf("cona2 \n");
        } //keeps given erros in here
        fwrite(&buffer, sizeof(char), 2, out);
        memset(buffer, 0, sizeof(buffer));
    }
    printf(" \n in: %zu \n", size);
    printf(" \n out: %zu \n", file_size(out));

    fclose(out);
    fclose(in);
    system("PAUSE");
    return(0);
}

我在这里的主要问题是如果fread功能在一个循环中工作,如果我可以在文件ervytime中只询问n个元素,而不是一次性所有文件,我试试这个但它让我看错了该文件,它没有读任何东西。

1 个答案:

答案 0 :(得分:2)

使用

找到文件大小后出现问题
fseek(fd, 0, SEEK_END);
return ftell(fd);

因为在尝试从文件中读取之前,你不会回到文件的开头。

rewind(fd);

fseek(fd, 0, SEEK_SET);