WriteFileEx

【勇芳软件工作室】汉化HomePreviousNext

WriteFileEx函数将数据写入文件。它专为异步操作而设计,不同于专为同步和异步操作而设计的WriteFile.

WriteFileEx异步报告其完成状态,在写入完成并调用线程处于可警告的等待状态时调用指定的完成例程。

BOOL WriteFileEx(

HANDLE 【HFILE】,//处理输出文件
LPCVOID 【lpBuffer】,//指向输入缓冲区的指针
DWORD 【nNumberOfBytesToWrite】,//要写入的字节数
LPOVERLAPPED 【lpOverlapped的】,//指向异步的指针。I / O日期
LPOVERLAPPED_COMPLETION_ROUTINE 【lpCompletionRoutine】// PTR。完成例程
); 

参数

【HFILE】

指定要写入的文件实体的打开句柄。必须使用FILE_FLAG_OVERLAPPED标志创建该文件句柄,并使用该文件对GENERIC_WRITE进行访问。

Windows NT: 【HFILE】可以是使用CreateFile函数的FILE_FLAG_OVERLAPPED标志打开的任何句柄,或由插座接受函数返回的套接字句柄。

Windows 95: 【HFILE】可以是通过CreateFile FILE_FLAG_OVERLAPPED标志打开的通信资源,邮槽或命名管道句柄,或由插座接受函数返回的套接字句柄。Windows 95不支持对磁盘文件的异步操作。

【lpBuffer】

指向包含要写入文件的数据的缓冲区。

该缓冲区必须在写入操作的持续时间内保持有效。在写入操作完成之前,调用者不得使用此缓冲区。

【nNumberOfBytesToWrite】

指定要写入文件的字节数。

如果【nNumberOfBtyesToWrite】为零,则此函数不起作用;特别是它不会截断文件。有关其他讨论,请参阅以下备注部分。

【lpOverlapped的】

指向OVERLAPPED数据结构,提供在重叠(异步)写入操作期间使用的数据。

对于支持字节偏移量的文件,您必须指定开始写入文件的字节偏移量。您可以通过设置OVERLAPPED结构的【抵消】【OffsetHigh】成员指定此偏移量。对于不支持字节偏移__命名管道的文件,例如__,您必须将【抵消】【OffsetHigh】设置为零或WriteFileEx失败。

WriteFileEx函数忽略OVERLAPPED结构的【活动】成员。应用程序可以在WriteFileEx呼叫的上下文中自由使用该成员进行自己的目的。WriteFileEx通过调用或排队调用【lpCompletionRoutine】指向的完成例程来完成其写入操作,因此不需要事件句柄。

WriteFileEx功能使用OVERLAPPED结构的【内部】【InternalHigh】成员。您不应该更改这些成员的价值。

在写操作期间,OVERLAPPED数据结构必须保持有效。在写入操作未完成时,它不应该是可以超出范围的变量。

【lpCompletionRoutine】

当写入操作完成并且调用线程处于可警告的等待状态时,指向要调用的完成例程。有关此完成例程的更多信息,请参阅FileIOCompletionRoutine.

返回值

如果函数成功,返回值不为零。

如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.

如果WriteFileEx函数成功,调用线程将异步I / O(输入/输出)操作挂起:对文件进行重叠写入操作。当此I / O操作完成并且调用线程在可警告的等待状态下被阻止时,操作系统调用【lpCompletionRoutine】指向的功能,等待完成,返回代码为WAIT_IO_COMPLETION。

如果函数成功并且文件写入操作完成,但是调用线程不处于可警告的等待状态,系统会将呼叫队列到持有该调用的* 【lpCompletionRoutine,】,直到调用线程进入可警告的等待状态。有关可警告等待状态和重叠输入/输出操作的更多信息,请参阅同步.

备注

如果输出文件的一部分被其他进程锁定,并且指定的写操作与锁定部分重叠,则WriteFileEx功能失败。

写入操作完成之前,应用程序不得从写入操作直接读取或写入输出缓冲区。输出缓冲区的过早访问可能导致从该缓冲区写入的数据的损坏。

WriteFileEx功能可能会失败,如果有异常异步I / O请求太多,返回消息ERROR_INVALID_USER_BUFFER或ERROR_NOT_ENOUGH_MEMORY。

要取消所有挂起的异步I / O操作,请使用CancelIO功能。此函数仅取消调用线程为指定的文件句柄发出的操作。取消的I / O操作完成,错误ERROR_OPERATION_ABORTED。

如果【HFILE】是命名管道或不支持字节偏移量的其他文件实体的句柄,则【lpOverlapped的】指向的OVERLAPPED结构的【抵消】【OffsetHigh】成员必须为零,否则{ 989796137}功能失败。

应用程序使用WaitForSingleObjectExWaitForMultipleObjectsExMsgWaitForMultipleObjectsExSignalObjectAndWaitSleepEx功能来输入可警告的等待状态。有关可警告等待状态和重叠输入/输出操作的更多信息,请参阅同步.

Windows 95:在此平台上,通信端口不能使用WriteFileExReadFileEx进行通信。但是,您可以使用WriteFileReadFile来执行异步通信。

也可以看看

CancelIo, CreateFile, FileIOCompletionRoutine, MsgWaitForMultipleObjectsEx, OVERLAPPED, ReadFileEx, SetEndOfFile, SleepEx, SignalObjectAndWait, WaitForMultipleObjectsEx, WaitForSingleObjectEx, WriteFile