我的工作是翻译一个从 C 到 C++ 的应用程序,该应用程序已安装在 Linux 发行版上。所以我希望 C 和 Linux 的功能。
我在读取二进制文件时遇到问题。它说当它遇到一个时到达EOFctrl-Z
到达文件实际末尾之前的字符。
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
作为文件末尾。
到目前为止已尝试过
我的解决方案是在 Windows 上编译时执行以下操作c++
在命令提示符下执行
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 https://cygwin.com/其中一些答案是我的。但这也失败了。
StackOverflow 答案
当在 SO 中查看答案时,我们看到Windows https://stackoverflow.com/questions/15034012/ifstream-eof-end-of-file-is-reached-before-the-real-end, 视窗文件结束符 https://stackoverflow.com/questions/6258812/why-does-this-stream-of-data-end-at-byte-26, 二元溶液 https://stackoverflow.com/questions/2307057/how-to-read-a-binary-file-in-c-video-images-or-text,二进制模式 https://stackoverflow.com/questions/13268591/using-c-standard-streams-in-binary-mode-through-swig-python-on-mingw and 流数据在字节 26 处结束 https://stackoverflow.com/questions/6258812/why-does-this-stream-of-data-end-at-byte-26?lq=1 and 早期 Windows 达到 EOF https://stackoverflow.com/questions/164002/why-is-fread-reaching-the-eof-early?rq=1。他们告诉我:
- Windows 键(CTRL + Z、^Z)结束文件
- 我必须以二进制格式读取