У меня есть две программы: программа A (на Фортране) и программа 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_hChildStd_OUT_Rd — дескриптор вывода программы A.
Если я передам одно-, двух- или трехзначное (ые) целое число (скажем, 1 или 10 или 100), программа сработает, и я смогу получить число в массиве File_Data. Но для более высоких целых чисел и всех двойных чисел File_Data дает значение меньше значения. Обратите внимание, что для всех номеров мой bSuccess — ИСТИНА! что означает, что он может читать файл.
Можете ли вы помочь мне решить проблему. Спасибо!
Вы не можете использовать GetFileSize()
с трубами, только файлы. Чтобы определить, сколько данных доступно для чтения из канала, используйте PeekNamedPipe()
вместо. И обратите внимание на dwRead
выходное значение, оно говорит вам, сколько байтов было фактически прочитано, что может быть меньше, чем сколько байтов вы запрашиваете.
Других решений пока нет …