CAtlTemporaryFile 类
此类提供用于创建和使用临时文件的方法。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
class CAtlTemporaryFile
成员
公共构造函数
名称 | 描述 |
---|---|
CAtlTemporaryFile::CAtlTemporaryFile | 构造函数。 |
CAtlTemporaryFile::~CAtlTemporaryFile | 析构函数。 |
公共方法
名称 | 描述 |
---|---|
CAtlTemporaryFile::Close | 调用此方法可关闭临时文件并删除其内容,或将其存储在指定文件名下。 |
CAtlTemporaryFile::Create | 调用此方法可创建临时文件。 |
CAtlTemporaryFile::Flush | 调用此方法可将文件缓冲区中剩余的任何数据强制写入临时文件。 |
CAtlTemporaryFile::GetPosition | 调用此方法可获取当前文件指针位置。 |
CAtlTemporaryFile::GetSize | 调用此方法可获取临时文件的大小(以字节为单位)。 |
CAtlTemporaryFile::HandsOff | 调用此方法可取消关联 CAtlTemporaryFile 对象中的文件。 |
CAtlTemporaryFile::HandsOn | 调用此方法可打开现有临时文件并将指针置于文件末尾。 |
CAtlTemporaryFile::LockRange | 调用此方法可锁定文件中的某个区域,以防止其他进程访问它。 |
CAtlTemporaryFile::Read | 调用此方法可从文件指针指示的位置开始读取临时文件中的数据。 |
CAtlTemporaryFile::Seek | 调用此方法可移动临时文件的文件指针。 |
CAtlTemporaryFile::SetSize | 调用此方法可设置临时文件的大小。 |
CAtlTemporaryFile::TempFileName | 调用此方法可返回临时文件的名称。 |
CAtlTemporaryFile::UnlockRange | 调用此方法可解锁临时文件的某个区域。 |
CAtlTemporaryFile::Write | 调用此方法可从文件指针指示的位置开始将数据写入临时文件中。 |
公共运算符
“属性” | 描述 |
---|---|
CAtlTemporaryFile::operator HANDLE | 返回临时文件的句柄。 |
备注
CAtlTemporaryFile
可用于轻松地创建和使用临时文件。 该文件会自动命名、打开、关闭和删除。 如果在文件关闭后需要文件内容,则可以将其保存到具有指定名称的新文件中。
要求
头文件:atlfile.h
示例
请参阅 CAtlTemporaryFile::CAtlTemporaryFile 的示例。
CAtlTemporaryFile::CAtlTemporaryFile
构造函数。
CAtlTemporaryFile() throw();
备注
在对 CAtlTemporaryFile::Create 进行调用之前,实际上不会打开文件。
示例
// Declare the temporary file object
CAtlTemporaryFile myTempFile;
// Create the temporary file, without caring where it
// will be created, but with both read and write access.
ATLVERIFY (myTempFile.Create(NULL, GENERIC_READ|GENERIC_WRITE) == S_OK);
// Create some data to write to the file
int nBuffer[100];
DWORD bytes_written = 0, bytes_read = 0;
int i;
for (i = 0; i < 100; i++)
nBuffer[i] = i;
// Write some data to the file
myTempFile.Write(&nBuffer, sizeof(nBuffer), &bytes_written);
// Confirm it was written ok
ATLASSERT(bytes_written == sizeof(nBuffer));
// Flush the data to disk
ATLVERIFY(myTempFile.Flush() == S_OK);
// Reset the file pointer to the beginning of the file
ATLVERIFY(myTempFile.Seek(0, FILE_BEGIN) == S_OK);
// Read in the data
myTempFile.Read(&nBuffer, sizeof(nBuffer), bytes_read);
// Confirm it was read ok
ATLASSERT(bytes_read == sizeof(nBuffer));
// Close the file, making a copy of it at another location
ATLVERIFY(myTempFile.Close(_T("c:\\temp\\mydata.tmp")) == S_OK);
CAtlTemporaryFile::~CAtlTemporaryFile
析构函数。
~CAtlTemporaryFile() throw();
备注
析构函数调用 CAtlTemporaryFile::Close。
CAtlTemporaryFile::Close
调用此方法可关闭临时文件并删除其内容,或将其存储在指定文件名下。
HRESULT Close(LPCTSTR szNewName = NULL) throw();
参数
szNewName
要在其中存储临时文件内容的新文件的名称。 如果此参数为 NULL,则会删除临时文件的内容。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
示例
请参阅 CAtlTemporaryFile::CAtlTemporaryFile 的示例。
CAtlTemporaryFile::Create
调用此方法可创建临时文件。
HRESULT Create(LPCTSTR pszDir = NULL, DWORD dwDesiredAccess = GENERIC_WRITE) throw();
参数
pszDir
临时文件的路径。 如果此项为 NULL,则调用 GetTempPath 以分配路径。
dwDesiredAccess
所需访问权限。 请参阅 Windows SDK 的 CreateFile 中的 dwDesiredAccess。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
示例
请参阅 CAtlTemporaryFile::CAtlTemporaryFile 的示例。
CAtlTemporaryFile::Flush
调用此方法可将文件缓冲区中剩余的任何数据强制写入临时文件。
HRESULT Flush() throw();
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
类似于 CAtlTemporaryFile::HandsOff,但文件未关闭。
示例
请参阅 CAtlTemporaryFile::CAtlTemporaryFile 的示例。
CAtlTemporaryFile::GetPosition
调用此方法可获取当前文件指针位置。
HRESULT GetPosition(ULONGLONG& nPos) const throw();
参数
nPos
位置(以字节表示)。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
若要更改文件指针位置,请使用 CAtlTemporaryFile::Seek。
CAtlTemporaryFile::GetSize
调用此方法可获取临时文件的大小(以字节为单位)。
HRESULT GetSize(ULONGLONG& nLen) const throw();
参数
nLen
文件中的字节数。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
CAtlTemporaryFile::HandsOff
调用此方法可取消关联 CAtlTemporaryFile
对象中的文件。
HRESULT HandsOff() throw();
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
HandsOff
和 CAtlTemporaryFile::HandsOn 用于取消关联对象的文件,并在需要的情况下重新附加该文件。 HandsOff
会将文件缓冲区中剩余的任何数据强制写入临时文件,然后关闭该文件。 如果要永久关闭和删除文件,或者要关闭具有给定名称的文件并保留其内容,请使用 CAtlTemporaryFile::Close。
CAtlTemporaryFile::HandsOn
调用此方法可打开现有临时文件并将指针置于文件末尾。
HRESULT HandsOn() throw();
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
CAtlTemporaryFile::HandsOff 和 HandsOn
用于取消关联对象的文件,并在需要的情况下重新附加该文件。
CAtlTemporaryFile::LockRange
调用此方法可锁定临时文件中的某个区域,以防止其他进程访问它。
HRESULT LockRange(ULONGLONG nPos, ULONGLONG nCount) throw();
参数
nPos
文件中应开始进行锁定的位置。
nCount
要锁定的字节范围的长度。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
锁定文件中的字节将阻止其他进程访问这些字节。 可以锁定文件的多个区域,但不允许使用重叠区域。 若要成功解锁区域,请使用 CAtlTemporaryFile::UnlockRange,确保字节范围与之前锁定的区域完全对应。 LockRange
不会合并相邻区域;如果有两个相邻的锁定区域,则必须单独解锁每个区域。
CAtlTemporaryFile::operator HANDLE
返回临时文件的句柄。
operator HANDLE() throw();
CAtlTemporaryFile::Read
调用此方法可从文件指针指示的位置开始读取临时文件中的数据。
HRESULT Read(
LPVOID pBuffer,
DWORD nBufSize,
DWORD& nBytesRead) throw();
参数
pBuffer
指向缓冲区的指针,该缓冲区将接收从文件读取的数据。
nBufSize
缓冲区大小(以字节为单位)。
nBytesRead
读取的字节数。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
调用 CAtlFile::Read。 若要更改文件指针的位置,请调用 CAtlTemporaryFile::Seek。
示例
请参阅 CAtlTemporaryFile::CAtlTemporaryFile 的示例。
CAtlTemporaryFile::Seek
调用此方法可移动临时文件的文件指针。
HRESULT Seek(LONGLONG nOffset, DWORD dwFrom = FILE_CURRENT) throw();
参数
nOffset
从 dwFrom 提供的起点算起的偏移量(以字节为单位)。
dwFrom
起点(FILE_BEGIN、FILE_CURRENT 或 FILE_END)。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
调用 CAtlFile::Seek。 若要获取当前文件指针位置,请调用 CAtlTemporaryFile::GetPosition。
示例
请参阅 CAtlTemporaryFile::CAtlTemporaryFile 的示例。
CAtlTemporaryFile::SetSize
调用此方法可设置临时文件的大小。
HRESULT SetSize(ULONGLONG nNewLen) throw();
参数
nNewLen
文件的新长度(以字节为单位)。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
调用 CAtlFile::SetSize。 返回时,文件指针位于文件末尾。
CAtlTemporaryFile::TempFileName
调用此方法可返回临时文件的名称。
LPCTSTR TempFileName() throw();
返回值
返回指向文件名的 LPCTSTR。
注解
文件名在 CAtlTemporaryFile::CAtlTemporaryFile 中通过调用 GetTempFile Windows SDK 函数生成。 临时文件的文件扩展名将始终为“TFR”。
CAtlTemporaryFile::UnlockRange
调用此方法可解锁临时文件的某个区域。
HRESULT UnlockRange(ULONGLONG nPos, ULONGLONG nCount) throw();
参数
nPos
文件中应开始进行解锁的位置。
nCount
要解锁的字节范围的长度。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
CAtlTemporaryFile::Write
调用此方法可从文件指针指示的位置开始将数据写入临时文件中。
HRESULT Write(
LPCVOID pBuffer,
DWORD nBufSize,
DWORD* pnBytesWritten = NULL) throw();
参数
pBuffer
缓冲区,其中包含要写入到文件中的数据。
nBufSize
要从缓冲区传输的字节数。
pnBytesWritten
写入的字节数。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
调用 CAtlFile::Write。
示例
请参阅 CAtlTemporaryFile::CAtlTemporaryFile 的示例。