2014-11-03 128 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