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 中產生,並呼叫 GetTempFileWindows 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 的範例。