2014-11-03 148 views
0

我的問題很簡單。我有一個ascii或二進制文件,無論如何。現在,我希望文件中的每個字節都是0x4f,我怎麼能在C中做到這一點?問題很簡單,但令人驚訝的是,互聯網上沒有答案。我有一個示例代碼,但是,有一個死循環,當我運行程序:如何覆蓋C文件?

#include <stdio.h> 
int main() 
{ 
    FILE * pFile; 
    pFile = fopen ("write_file_2","wb"); 
    unsigned char c = 0x4f; 
    while(1){ 
     if(feof(pFile)) 
      break; 
     int res = fputc(c, pFile); 
     printf("%d\n", res); 
    } 
    fclose (pFile); 
    return 0; 
} 

但不知爲何,FEOF()有沒有影響。 謝謝!

+0

這不是真的在互聯網上沒有答案。問題是,你不知道如何結合互聯網上的大量信息。 feof()不起作用,因爲您處於'w'模式。 – castarco 2014-11-03 09:29:10

+2

關於'feof()'的問題,你可以閱讀http://stackoverflow.com/q/5431941/1865106 – SSC 2014-11-03 09:30:43

+0

@SSC不同的問題 – 2014-11-03 10:08:23

回答

2

的問題是,你正在使用"wb"w - 創建輸出操作一個空文件),更改爲"rb+",並使用ftell代替feof(看看到「while(!feof(file))」 is always wrong

#include <stdio.h> 

int main(void) 
{ 
    FILE * pFile; 
    long i, size; 
    unsigned char c = 0x4f; 

    pFile = fopen("write_file_2", "rb+"); 
    fseek(pFile, 0, SEEK_END); 
    size = ftell(pFile); 
    fseek(pFile, 0, SEEK_SET); 
    for (i = 0; i < size; i++) { 
     int res = fputc(c, pFile); 
     printf("%d\n", res); 
    } 
    fclose(pFile); 
    return 0; 
} 
0

也許你應該首先檢查文件的大小:

fseek(f, 0, SEEK_END); 
lSize = ftell(f); 
fseek(f, 0, SEEK_SET); 

然後使用「FWRITE」到

1

一旦所需的字節數和字節數寫入該文件,你這樣做pFile = fopen ("write_file_2","wb");的文件被打開並截斷爲0字節。所以pFile在EOF所以feof()將返回true。

您可能想用"r+b"打開它,使用ftell(),fseek()將尺寸設置爲第0位並開始編寫設計數據。

+1

也許用「r + b」打開它是對的! – linuxie 2014-11-03 09:44:21

+0

@linuxie,是的,是對的。 – Rohan 2014-11-03 10:49:47