2012-10-07 27 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