📄 12.4.2 文件的写入.txt
字号:
12.4.2 文件的写入
Win32API提供的WriteFile函数可以向一个文件中写入数据,并可以指定是以同步还是异步方式来完
成写入操作。该函数的声明形式如下所示:
BOOL WriteFile (
HANDLE hFile ,
LPCVOID lpBuffer ,
DWORD nNumberOfBytesToWrite ,
LPDWORD lpNumberOfBytesWritten ,
LPOVERLAPPED lpOverlapped
WriteFile函数各个参数的含义如下所述:
. hFile
指定要写入数据的文件的句柄。
. IpBuffer
指向包含将要写入文件的数据的缓冲区的指针。
. nNumberOfBytesToWrite
指明要向文件中写入的字节数。
. lpNumberOfBytesWritten
用来接收实际写入到文件中的字节数。
. IpOverlapped
指向OVERLAPPED结构体的指针。读者应注意,这个参数如果想要起作用,那么在
利用 CreateFile打开文件设置文件属性时需要添加 FILE_FLAG_OVERLAPPED标记,告诉系统需要异
步地访问这个文件。如果没有设置这个标记,在默认情况下就是以同步 10的方式访问这个文件。所
谓同步,是指在写入时,却果没有完整地写入数据,或者在读取数据时,没有读完时,程序将被挂
起,直到数据写入或读取完毕,程序才能继续运行。如果设置了 FILE_FLAG_OVERLAPPED这个标记,
也就是设置了异步 10方式,在调用读写函数时,将会告诉系统不必等到 10结束,函数调用会立即
返回,操作系统会使用它的线程为我们完成 10操作,当操作系统完成 10操作时,应用程序会得到
相应的通知。
下面,我们在 File程序中利用 Win32 API提供的 CreateFile函数打开,或者说是创建一个文件,
然后利用 WriteFile函数写入一些数据。首先将 CFileView类的 OnFileWrite函数中己有代码注释
起来,然后添加如例 12-16所示的代码。
例 12-16
void CFileView::OnFileWrite()
//定义一个句柄变量
HANDLE hFile;
//创建文件
hFile=CreateFile("5.txt", GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
//接收实际写入的字节数
DWORD dwWrites;
//写入数据
WriteFile (hFile, "http://www. sW1Xin.org" , strlen ("http://www. sW1Xin.org") , &dwWrites ,
NULL);
//关闭文件句柄
CloseHandle(hFile);
在上述例 12-16所示代码中,调用 CreateFi1e函数创建文件: 5.txt,因为要进行写入操作,所以
访问方式设置为: GENERIC_WRITE;共享方式参数设置为 0.表明该对象不能被共享:第四个参数设置
为 NULL.让我们创建的这个文件对象使用默认的安全属性:第五个参数,即文件的创建方式设置为 CREATE_NEW创建一个新文件,如果指定的文件己经存在,则该函数调用将失败:第六个参数,即文
件属性设置为 FILE_ATIRmUTE_ NORMAL;最后一个参数,即模板文件的句柄设置为 NULL。
接下来,调用 WriteFile函数向文件中写入字符串数据: http://www.sunxin.o哩。对于该函数的最
后一个参数,即指向 OVERLAPPED结构体的指针,因为在打开文件时并没有指定
FILE_FLAG_OVERLAPPED标记,也就是使用默认的同步 10方式,所以在调用 WriteFile时,可以将此
参数设置为 NULL。
运行 File程序,单击【文件操作\写入文件】菜单项,然后打开 File程序所在目录下的 5.txt文件,
可以看到其中的数据就是程序中写入的宇符串: http://www.sunxin.o哩,说明写入操作成功了。
.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -