C++ 在Windows中使用ReadFile()函数读取二进制数据

C++ 在Windows中使用ReadFile()函数读取二进制数据,c++,binary-data,readfile,C++,Binary Data,Readfile,我有两个程序:程序A(FORTRAN)和程序B(C++)。它们通过管道相互连接。程序B应该直接从程序A的控制台读取二进制数据,但由于某些原因,我不能这样做: 以下是程序B的阅读部分: BOOL bSuccess = FALSE; LPBYTE File_Data; DWORD dwFileSize; wFileSize = GetFileSize(V_hChildStd_OUT_Rd, NULL); File_Data = new BYTE[dwFileSize+1]; bSuccess = R

我有两个程序:程序A(FORTRAN)和程序B(C++)。它们通过管道相互连接。程序B应该直接从程序A的控制台读取二进制数据,但由于某些原因,我不能这样做:

以下是程序B的阅读部分:

BOOL bSuccess = FALSE;
LPBYTE File_Data;
DWORD dwFileSize;
wFileSize = GetFileSize(V_hChildStd_OUT_Rd, NULL);
File_Data = new BYTE[dwFileSize+1];
bSuccess = ReadFile( V_hChildStd_OUT_Rd, File_Data, dwFileSize, &dwRead, NULL);
delete [] File_Data; 
注意:V_hchildsd_OUT_Rd是程序a输出的句柄

如果我传递一个、两个或三个数字的整数(比如1、10或100),程序就会工作,我可以在文件\数据数组中获得该数字。但对于更高的整数和所有的双倍数,File_数据给出的值就更少了。请注意,对于所有数字,我的成功都是真的!这意味着它可以读取文件。
你能帮我解决这个问题吗。谢谢

不能对管道使用
GetFileSize()
,只能对文件使用。要确定可从管道读取的数据量,请改用。请注意
dwRead
输出值,它告诉您实际读取了多少字节,这可能小于您请求的字节数。

您不能在管道上使用
GetFileSize
,因为事先不知道大小。感谢您的快速回复。我将尝试PeekNamedPipe()。但是,即使我将大小指定为一个常数,例如双倍数的8字节,它仍然不能读取双数:FielyDATA =新字节[8 ] @ vector:你肯定FORTRAN和C++使用双倍的格式吗?这对你的程序来说是至关重要的。如果我不使用管道,只需用Fortran写一个二进制文件,用C++从文件中读取它就可以工作:FIL.Read((char *)和A,sieZof(double));问题是当我使用ReadFile()函数和管道时。你确定Fortran应用程序实际上正在向管道写入数据吗?首先,你是如何连接管道的?@VecTor:我无法回答这个问题,因为你没有说明它是如何失败的,也没有说明你是如何在代码上下文中使用它的,也没有说明你是如何初始化管道的。例如,您是否仍在使用
GetFileSize()
初始化
dwFileSize
?不要那样做。
PeekNamedPipe()
实际报告的是什么错误?如果你想让别人帮助你,你需要更具体一些。