Использование функции ReadFile () для чтения двоичных данных в Windows

У меня есть две программы: программа 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 — ИСТИНА! что означает, что он может читать файл.
Можете ли вы помочь мне решить проблему. Спасибо!

0

Решение

Вы не можете использовать GetFileSize() с трубами, только файлы. Чтобы определить, сколько данных доступно для чтения из канала, используйте PeekNamedPipe() вместо. И обратите внимание на dwRead выходное значение, оно говорит вам, сколько байтов было фактически прочитано, что может быть меньше, чем сколько байтов вы запрашиваете.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector