微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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()函数中!请记住这一点,否则其他读取或写入将不包括在内.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐