📄 12.4.3 文件的读取.txt
字号:
12.4.3 文件的读取
ReadFile函数可以从文件读取数据,该函数的声明形式如下所示。
BOOL ReadFile(
HANDLE hFile ,
LPvorD lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
ReadFile函数各个参数与WriteFile函数相应参数的含义类似,分别如下所述:
. hFile
指定要读取其数据的文件的句柄。
. lpBuffer
指向一个缓冲区的指针,该缓冲区将接收从文件中读取的数据。
. nNumberOfBytesToRead
指定从文件读取的字节数。
. lpNumberOfBytesRead
用来接收实际读到的字节数。
. lpOverlapped
指向OVERLAPPED结构体的指针。读者应注意,与上面的WriteFile函数相同,这个参数如果想起作用
的话,那么在利用 CreateFile打开文件设置文件属性时需要添加 FILE_FLAG_OVERLAPPED标记。
下面,我们在File程序中利用 CreateFile函数打开上面创建的文件: 5.txt,然后利用 ReadFile
函数读取其中的数据。首先将CFileView类的OnFileRead函数中已有代码注释起来,然后添加如例
12-17所示的代码。
例12-17
void CFileView: :OnFileRead() {
HANDLE hFile;
1/打开文件
hFile=CreateFile("5.txt" , GENERIC_READ, 0, NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL ,
NULL);
11接收实际读取到的数据
char ch[1001] ;
11接收实际读取到的字节数
DWORD dwReads;
11读取数据
ReadFile(hFile , ch, 100 , &dwReads , NULL) ;
11设置字符串结束字符
ch[dwReadsl=0;
.
第 12
//关闭打开的文件对象的句柄
CloseHandle(hFile) ;
//显示读取到的数据
MessageBox (ch) ;
在上述例 12-17所示的代码中,首先使用 CreateFile打开现有文件: 5.txt,因为现在要从文件中
读取数据,所以访问方式设置为: GENERIC_READ;共享方式参数设置为 0,表明该对象不能被共享:
第四个参数设置为 NULL,让我们创建的这个文件对象使用默认的安全属性;第五个参数,即文件的
创建方式设置为 OPEN_EXISTING,即打开一个己有文件;第六个参数,即文件属性设置为
FILE_ATTRIBUTE_NORMAL;最后一个参数,即模板文件的句柄设置为 NULL。
接下来,调用 ReadFile函数从文件中读取数据。该函数的第一个参数设置为 CreateFile函数返回
的文件句柄:第二个参数就是用来接收从文件中读取的数据的缓冲区: ch;第三个参数指定读取的字
节数: 100;第四个参数接收实际读到的字节数,将该字节数保存到 dwReads变量中;最后一个参数指
向 OVERLAPPED结构体的指针,这里设置为 NULL。读者一定要记住,如果想让最后一个参数起作用
的话,则在打开文件时一定要设置 FEE-FLAG-OVERLAPPED标记。
读取操作完成之后,读到的数据就保存到了字符数组 ch中,接下来将该字符数组中保存的己读取到
的数据的下一个元素设置为 0,作为所读取字符串的结尾。读者可以运行 File程序,单击【文件操
作\读取文件】菜单项,从程序弹出的消息框中,将可以看到读取的数据是正确的。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -