在中间读取并复制带有EOF指示的文件

MBy*_*ByD 0 c c++ file-io eof

我使用下面的代码从一个二进制文件复制到另一个,但第一个文件包含一些EOF指示符(0xFF)作为其一部分,因此复制功能实际上复制文件直到它的第一个EOF指示符.

例如:如果我的文件{0x01, 0x02, 0x03, 0xFF, 0x01, 0x02, 0xFF, 0xFF}只是{0x01, 0x02, 0x03}将被复制到新文件.任何想法如何解决它(或者我可能在那里遗漏了一些......)

码:

int Util_Copy_File(char* source, char* dest)
{
    FILE *fs,*ft;  
    char ch;
    char infile[100];
    sprintf(infile, "%s", dest);
    fs = fopen(infile,"r");  
    if(fs==NULL)  
    {
        return -1;  
    }
    ft = fopen(dest,"w");  
    if(ft==NULL)  
    {  
    fclose(fs);  
    return STATUS_FAIL;
    }  

    while(1)  
    {  
    ch = getc(fs);  
    if(ch==EOF)  
    {  
        break;  
    }  
    else  
        putc(ch,ft);  
    } 
    fclose(fs);  
    fclose(ft);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢,Binyamin

nos*_*nos 13

fgetc返回一个int,而不是一个char,因此您可以区分EOF和一个与EOF值相同的char.

更改:

char ch;
Run Code Online (Sandbox Code Playgroud)

int ch
Run Code Online (Sandbox Code Playgroud)

并且(如果你在*nix上通常不相关)

fs = fopen(infile,"r");  
Run Code Online (Sandbox Code Playgroud)

fs = fopen(infile,"rb");  
Run Code Online (Sandbox Code Playgroud)

  • 它甚至还有一个维基百科(子)页面http://en.wikipedia.org/wiki/Getchar#EOF_pitfall (2认同)