Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > ReadFile


Автор: Helicopterr 24.4.2006, 00:38
Нужно прочитать файл в массив, использую ReadFile:
Код

char myArray[100];
ReadFile ( hFile,    //это я сделал
myArray,          //это мой массив
100,                 //здесь точно не знаю
?,                   //? LPDWORD lpNumberOfBytesRead
?                   //? LPOVERLAPPED lpOverlapped
); 

По идее ф-ция популярная, объясните кто пользовался. Заранее спасибо.

 

Автор: LPBOY 24.4.2006, 01:02
BOOL ReadFile(
  HANDLE hFile,
  LPVOID lpBuffer,
  DWORD nNumberOfBytesToRead,
  LPDWORD lpNumberOfBytesRead,
  LPOVERLAPPED lpOverlapped
);

nNumberOfBytesToRead - число байт, которое хочешь прочитать.
lpNumberOfBytesRead - указатель на DWORD. После завершения функции этот DWORD содержит реальное количество прочитанных байт, если дошли до конца файла, то будет равен нулю.
lpOverlapped - забей, поставь 0. smile А вообще можно передавать указатель на структуру OVERLAPPED, чтобы 
начинать чтение с определенной позиции. Вместо этого можно использовать SetFilePointer. Если при открытии файла был установлен FILE_FLAG_OVERLAPPED, то параметр используется для асинхронного ввода/вывода. 

Автор: Helicopterr 24.4.2006, 14:21
Цитата(LPBOY)
lpNumberOfBytesRead - указатель на DWORD. После завершения функции этот DWORD содержит реальное количество прочитанных байт

чуть по чуть понял, но как его инициализировать?

Код

HANDLE hFile = CreateFile( "help.txt", GENERIC_READ, FILE_SHARE_READ, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); 

LPBYTE myArray[100];
LPDWORD lpNumberOfBytesRead; //?

ReadFile( hFile, myArray, 100, lpNumberOfBytesRead, NULL ) ; 

CloseHandle(hFile);

Появляется виндовое окно отправлять отчет или не отправлять... 

Автор: LPBOY 24.4.2006, 14:53
Цитата(Helicopterr @  24.4.2006,  14:21 Найти цитируемый пост)
но как его инициализировать

Вот так
Код

DWORD dw;
LPDWORD lpNumberOfBytesRead = &dw;

или сразу передавай в функцию &dw.
Код

#include <windows.h>
#include <iostream>

int main()
{
    const int N = 100;
    DWORD dw;
    char array[N];
    HANDLE h = CreateFile ("d:\\file.txt", GENERIC_READ, 0, 0, 
                             OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if(h == INVALID_HANDLE_VALUE)
    {
        std::cout << "error\n";
        return -1;
    }
    ReadFile(h, array, N, &dw, 0);
    for(int i = 0; i < dw; ++i)
        std::cout << array[i] << ' ';
    CloseHandle(h);
    return 0;
}


Цитата(Helicopterr @  24.4.2006,  14:21 Найти цитируемый пост)
Появляется виндовое окно отправлять отчет или не отправлять...  

Не отправляй. smile
  

Автор: nikitao 24.4.2006, 15:33
 smile 
Цитата(Helicopterr @  24.4.2006,  15:21 Найти цитируемый пост)
Появляется виндовое окно отправлять отчет или не отправлять... 

По типу,как мое собственное приложение достоет меня и говорит,мол ,чтобы я скачал новое обнавление
 smile  

Автор: Helicopterr 24.4.2006, 22:00
Все работает. Большое спасибо! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)