注释
活动模板库(ATL)将继续受到支持。 但是,我们不再添加功能或更新文档。
此类围绕 Windows 文件处理 API 提供精简包装器。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
class CAtlFile : public CHandle
成员
公共构造函数
| 名称 | 描述 |
|---|---|
| CAtlFile::CAtlFile | 构造函数。 |
公共方法
| 名称 | 描述 |
|---|---|
| CAtlFile::Create | 调用此方法以创建或打开文件。 |
| CAtlFile::Flush | 调用此方法可清除文件的缓冲区,导致所有缓冲数据都被写入文件中。 |
| CAtlFile::GetOverlappedResult | 调用此方法可获取在文件上进行的重叠操作的结果。 |
| CAtlFile::GetPosition | 调用此方法可从文件中获取当前文件指针位置。 |
| CAtlFile::GetSize | 调用此方法以获取文件的大小(以字节为单位)。 |
| CAtlFile::LockRange | 调用此方法可锁定文件中的某个区域,以防止其他进程访问它。 |
| CAtlFile::Read | 调用此方法,从文件指针指示的位置开始读取文件中的数据。 |
| CAtlFile::Seek | 调用此方法可移动文件的文件指针。 |
| CAtlFile::SetSize | 调用此方法可设置文件的大小。 |
| CAtlFile::UnlockRange | 调用此方法可解锁文件的某个区域。 |
| CAtlFile::Write | 调用此方法,从文件指针指示的位置开始将数据写入文件中。 |
受保护的数据成员
| 名称 | 描述 |
|---|---|
| CAtlFile::m_pTM | 指向 CAtlTransactionManager 对象的指针 |
备注
使用此类的前提是,文件处理需求相对简单,但需要的抽象超出 Windows API 所提供的,无需包含 MFC 依赖项。
继承层次结构
CAtlFile
要求
头文件:atlfile.h
CAtlFile::CAtlFile
构造函数。
CAtlFile() throw();
CAtlFile(CAtlTransactionManager* pTM = NULL) throw();
CAtlFile(CAtlFile& file) throw();
explicit CAtlFile(HANDLE hFile) throw();
参数
文件
文件对象。
hFile
文件句柄。
pTM
指向 CAtlTransactionManager 对象的指针
备注
复制构造函数会将文件句柄的所有权从原始的 CAtlFile 对象转移到新构造的对象。
CAtlFile::Create
调用此方法以创建或打开文件。
HRESULT Create(
LPCTSTR szFilename,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL,
LPSECURITY_ATTRIBUTES lpsa = NULL,
HANDLE hTemplateFile = NULL) throw();
参数
szFilename
文件名。
dwDesiredAccess
所需访问权限。 请参阅 Windows SDK 的 CreateFile 中的 dwDesiredAccess。
dwShareMode
共享模式。 请参阅 中的 dwShareModeCreateFile。
dwCreationDisposition
创建处置。 请参阅 中的 dwCreationDispositionCreateFile。
dwFlagsAndAttributes
标志和属性。 请参阅 中的 dwFlagsAndAttributesCreateFile。
lpsa
安全属性。 请参阅 中的 lpSecurityAttributesCreateFile。
hTemplateFile
模板文件。 请参阅 中的 hTemplateFileCreateFile。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 CreateFile 来创建或打开文件。
CAtlFile::Flush
调用此方法可清除文件的缓冲区,导致所有缓冲数据都被写入文件中。
HRESULT Flush() throw();
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 FlushFileBuffers 将缓冲的数据刷新到文件。
CAtlFile::GetOverlappedResult
调用此方法可获取在文件上进行的重叠操作的结果。
HRESULT GetOverlappedResult(
LPOVERLAPPED pOverlapped,
DWORD& dwBytesTransferred,
BOOL bWait) throw();
参数
pOverlapped
重叠的结构。 请参阅 Windows SDK 的 GetOverlappedResult 中的 lpOverlapped。
dwBytesTransferred
传送的字节数。 请参阅 中的 lpNumberOfBytesTransferredGetOverlappedResult。
bWait
等待选项。 请参阅 中的 bWaitGetOverlappedResult。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 GetOverlappedResult 可获取对文件执行的重叠操作的结果。
CAtlFile::GetPosition
调用此方法可获取当前文件指针位置。
HRESULT GetPosition(ULONGLONG& nPos) const throw();
参数
nPos
位置(以字节表示)。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 SetFilePointer 可获取当前文件指针位置。
CAtlFile::GetSize
调用此方法以获取文件的大小(以字节为单位)。
HRESULT GetSize(ULONGLONG& nLen) const throw();
参数
nLen
文件中的字节数。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 GetFileSize 可获取文件的大小(以字节为单位)。
CAtlFile::LockRange
调用此方法可锁定文件中的某个区域,以防止其他进程访问它。
HRESULT LockRange(ULONGLONG nPos, ULONGLONG nCount) throw();
参数
nPos
文件中应开始进行锁定的位置。
nCount
要锁定的字节范围的长度。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 LockFile 可锁定文件中的区域。 锁定文件中的字节将阻止其他进程访问这些字节。 可以锁定文件的多个区域,但不允许使用重叠区域。 使用 CAtlFile::UnlockRange 解锁区域时,字节范围必须与之前锁定的区域完全对应。
LockRange 不会合并相邻区域;如果有两个相邻的锁定区域,则必须单独解锁每个区域。
CAtlFile::m_pTM
指向 CAtlTransactionManager 对象的指针。
CAtlTransactionManager* m_pTM;
备注
CAtlFile::Read
调用此方法,从文件指针指示的位置开始读取文件中的数据。
HRESULT Read(
LPVOID pBuffer,
DWORD nBufSize) throw();
HRESULT Read(
LPVOID pBuffer,
DWORD nBufSize,
DWORD& nBytesRead) throw();
HRESULT Read(
LPVOID pBuffer,
DWORD nBufSize,
LPOVERLAPPED pOverlapped) throw();
HRESULT Read(
LPVOID pBuffer,
DWORD nBufSize,
LPOVERLAPPED pOverlapped,
LPOVERLAPPED_COMPLETION_ROUTINE pfnCompletionRoutine) throw();
参数
pBuffer
指向缓冲区的指针,该缓冲区将接收从文件读取的数据。
nBufSize
缓冲区大小(以字节为单位)。
nBytesRead
读取的字节数。
pOverlapped
重叠的结构。 请参阅 Windows SDK 的 ReadFile 中的 lpOverlapped。
pfnCompletionRoutine
完成例程。 请参阅 Windows SDK 的 ReadFileEx 中的 lpCompletionRoutine。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
前三个窗体调用 ReadFile,最后一个窗体调用 ReadFileEx 从文件读取数据。 使用 CAtlFile::Seek 移动文件指针。
CAtlFile::Seek
调用此方法可移动文件的文件指针。
HRESULT Seek(
LONGLONG nOffset,
DWORD dwFrom = FILE_CURRENT) throw();
参数
nOffset
从 dwFrom 提供的起点算起的偏移量。
dwFrom
起点(FILE_BEGIN、FILE_CURRENT 或 FILE_END)。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 SetFilePointer 可移动文件指针。
CAtlFile::SetSize
调用此方法可设置文件的大小。
HRESULT SetSize(ULONGLONG nNewLen) throw();
参数
nNewLen
文件的新长度(以字节为单位)。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 SetFilePointer 和 SetEndOfFile 可设置文件的大小。 返回时,文件指针位于文件末尾。
CAtlFile::UnlockRange
调用此方法可解锁文件的某个区域。
HRESULT UnlockRange(ULONGLONG nPos, ULONGLONG nCount) throw();
参数
nPos
文件中应开始进行解锁的位置。
nCount
要解锁的字节范围的长度。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
调用 UnlockFile 可解锁文件的某个区域。
CAtlFile::Write
调用此方法,从文件指针指示的位置开始将数据写入文件中。
HRESULT Write(
LPCVOID pBuffer,
DWORD nBufSize,
LPOVERLAPPED pOverlapped,
LPOVERLAPPED_COMPLETION_ROUTINE pfnCompletionRoutine) throw();
HRESULT Write(
LPCVOID pBuffer,
DWORD nBufSize,
DWORD* pnBytesWritten = NULL) throw();
HRESULT Write(
LPCVOID pBuffer,
DWORD nBufSize,
LPOVERLAPPED pOverlapped) throw();
参数
pBuffer
缓冲区,其中包含要写入到文件中的数据。
nBufSize
要从缓冲区传输的字节数。
pOverlapped
重叠的结构。 请参阅 Windows SDK 的 WriteFile 中的 lpOverlapped。
pfnCompletionRoutine
完成例程。 请参阅 Windows SDK 的 WriteFileEx 中的 lpCompletionRoutine。
pnBytesWritten
已写入的字节数。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
备注
前三个窗体调用 WriteFile,最后一个窗体调用 WriteFileEx 将数据写入文件。 使用 CAtlFile::Seek 移动文件指针。