c-防止Windows程序将^ Z解释为文件结尾

我的工作是翻译C-> C已安装在Linux发行版上.因此,我希望C和linux具有功能.

我在读取二进制文件时遇到问题.它说它在到达文件的实际结尾之前遇到ctrl-Z字符时到达了EOF.

大量执行bash

zcat file.txt.gz | txtToBinary | binaryToOutput

在命令提示符下执行

txtToBinary.exe < file.txt | binaryToOutput.exe

原始文本文件

 R  5643BYIDK           DK0016060346 11DKKXKLY 160               1
 R 10669VJK 98 1        IS0000004018  4ISKXICE 240         5000000
 M814

txtToBinary.exe-示例输出

^@^@^@ hello ^@    ^Z^@^@^@^@
^@^@^[SWMA ^Y^YC

问题在于程序将第一个^ Z解释为文件的末尾.

到目前为止尝试过

我的解决方案是使用c在Windows上编译时执行以下操作

在命令提示符下执行

txtToBinary.exe < file.txt | binaryToOutput.exe
int main(int argc, char* argv []){
    int loop (args_t* args){

    for (;;){
        char data [1024];
        int temp = read_msg (data, sizeof (data));
}

int read_msg(void* data, int size){
    _setmode(_fileno(stdin), _O_BINARY);
    _setmode(0,_0_BINARY);
    if(fread(((unsigned char *)data)+sizeof(*hdr),hdr->size-sizeof (*hdr),1,stdin) != 1);
        if(feof(stdin))
             printf("End of file error\n");
}

我还尝试了Cygwin,其中有些答案已经解决了.但这也失败了.

StackOverflow答案

当答案所以在这里看,我们看到了Windows,Windows EOF,Binary solution,Binary ModeStream data end at byte 26Reaching EOF early Windows.他们告诉我说:

– Windows键(CTRL Z,^ Z),使得文件的结束

-我必须以二进制格式阅读

解决方法:

我找到了问题的答案.它与您阅读的地方有关.你需要放

_setmode(0,_0_BINARY);

在main()函数中!请记住这一点,否则其他读取或写入将不包括在内.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...