2012-10-07 25 views
-1

我想解决一个问题,它需要我读取文件并生成另一个文件,其内容与原始文件相同,但每隔四个字节就会被删除。我试过这样做。有问题读取文件C

int main() 
{ 
    FILE *p; 
    FILE *q; 
    int i=0,k=0; 
    char c; 

    p = fopen("C:\\Users\\Teja\\Desktop\\Beethoven.raw","rw"); 
    q = fopen("C:\\Users\\Teja\\Desktop\\Beethoven_new.raw","w+"); 

    printf("%x is the EOF character \n",EOF); 
    while((c=fgetc(p))!=EOF) 
    { 

    if(i==3){ 
     i=0; 
     printf("Removing %x %d \n",c,k++); 
    } 
    else{ 
     printf("Putting %x %d \n",c,k++); 
     fputc(c,q); 
     i++; 
    } 
    } 
    fclose(p); 
    fclose(q); 

    return 0; 
} 

我试图读取的文件是.raw文件,大约10-15 MB。我注意到上面的代码通常在88个字节后停止读取文件。有什么方法可以阅读大文件或者我做错了什么?

+3

http://stackoverflow.com/questions/3977223/fgetc-does-not-identify-eof - getc和朋友返回** int **,不是char。 – Mat

+1

你有共享软件编译器吗? –

回答

2

除了已经指出的内容之外,关于打开文件的说明:它听起来像您的文件在二进制文件中,这意味着您必须将b添加到模式字符串中。此外,rw不是一种模式,因为您只需要从p中读取您想要的rb,并且由于您只写信给q,所以需要wbwb+

顺便说一句,为什么你需要fgetc返回一个int的原因是因为fgetc必须返回257个独特的价值观:中char所有可能的值,即0x000xFF以及一些独特的,以表示EOF,通常-1