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

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

我的工作是翻译一个已经安装在linux发行版上的C – > C ++应用程序,所以我希望C和linux的function完全相同。

我有一个阅读二进制文件的问题。 它表示在到达文件的实际末尾之前,遇到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解释为文件的结尾。

尝试到目前为止

我的解决scheme一直在使用c ++编译窗口时执行以下操作

在C ++编译的C库中如何处理运行时错误

在Windows上自动启动mongos

对于Windows窗体,PostMessage等于自己的什么?

用于.NET的蓬松云configuration

Windows上这四种不同types的Python shebangs有什么区别?

在命令提示符下执行

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 errorn"); }

我也尝试了Cygwin ,其中一些答案有我。 但是那也失败了。

StackOverflow答案

在这里查看答案时,我们看到Windows , Windows EOF , 二进制解决scheme , 二进制模式和stream数据在字节26处结束,在 Windows早期达到EOF 。 他们告诉我:

– Windows键(CTRL + Z,^ Z)结束文件

– 我必须以二进制格式读取

由于WToolkit.shutdown()没有完成,挂起我们的Java 6应用程序挂起?

如何使用batch file拆分string?

如何在源代码中设置执行程序的优先级?

Apache 2.4.23 PHP7.x Windows 10 x64 php_curl无法正常工作

PHP $ argv限于Windows上的9个参数吗?

我找到了我的问题的答案。 这与你读的地方有关。 你需要放

_setmode(0,_0_BINARY);

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

fread()是stdio的一部分。 你正在做的是打开原始文件为二进制文件,然后做文本模式的标准I / O。

您可以使用read()系统调用来替换现有的fread()调用。 (也就是说,fread()是一个调用,它执行一些缓冲,最后调用read()。)

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

相关推荐