vs2010 建立一个控制台工程
代码如下:
// ReadFileHH.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define FILE_NAME TEXT("126.txt")
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hEvent;
HANDLE hFile;
DWORD dwReturnValue;
char inBuffer[128];
DWORD nBytesToRead = 20;
DWORD dwBytesRead = 0;
DWORD dwFileSize ;
OVERLAPPED stOverlapped = {0};
DWORD dwError = 0;
LPCTSTR errMsg = NULL;
BOOL bResult = FALSE;
BOOL bContinue = TRUE;
int readed;
memset(inBuffer,0,sizeof(inBuffer));
hFile = CreateFile(FILE_NAME, // file to open
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_FLAG_OVERLAPPED, // overlapped operation
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE)
{
DWORD dwError = GetLastError();
printf("Could not open file (%d): %s\n", dwError);
return 0;
}
hEvent = CreateEvent(
NULL, // 安全属性
TRUE, // 复位方式 是否手动复位
FALSE, // 初始状态 是否被激活
NULL // 对象名称
);
if (hEvent == NULL)
{
DWORD dwError = GetLastError();
printf("Could not CreateEvent: %d %s\n", dwError);
return 0;
}
memset(&stOverlapped, 0, sizeof(stOverlapped));
stOverlapped.hEvent = hEvent; ;//事件对象,完成请求 请求触发;
stOverlapped.Offset = 0;
bResult = ReadFile(hFile,
inBuffer,
nBytesToRead,
&dwBytesRead,
&stOverlapped);
dwError = GetLastError();
if (!bResult){
if (GetLastError() == ERROR_IO_PENDING){//表示正在等待;
//等待数据来读完成;
WaitForSingleObject(hEvent, INFINITE);
readed = stOverlapped.InternalHigh;//读到了几个字节的数据;
inBuffer[readed] = 0;
printf("%s\n", inBuffer);
}
}
CloseHandle(hFile);
CloseHandle(hEvent);
return 0;
}
读的当前目录下的文件名字是 126.txt
该文件的内容如下:
1234567890
abcdefghij
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee
ffffffffff
gggggggggg
该文件使用 notepad++ 查看,显示所有字符,截图如下:
运行结果:
1234567890
abcdefgh
请按任意键继续. . .