CDataRecoveryHandler 類別
如果應用程式意外結束,會自動 CDataRecoveryHandler
儲存檔並加以還原。
語法
class CDataRecoveryHandler : public CObject
成員
建構函式
名稱 | 描述 |
---|---|
CDataRecoveryHandler::CDataRecoveryHandler | 建構 CDataRecoveryHandler 物件。 |
方法
資料成員
名稱 | 描述 |
---|---|
m_bRestoringPreviousOpenDocs | 指出數據復原處理程式是否重新開啟先前開啟的檔。 |
m_bSaveDocumentInfoOnIdle | 指出數據復原處理程式是否會在下一個閑置迴圈中自動儲存檔。 |
m_bShutdownByRestartManager | 指出重新啟動管理員是否導致應用程式結束。 |
m_dwRestartManagerSupportFlags | 指出重新啟動管理員為應用程式提供哪些支援的旗標。 |
m_lstAutosavesToDelete | 關閉源檔時未刪除的自動儲存盤案清單。 當應用程式結束時,重新啟動管理員會重試刪除檔案。 |
m_mapDocNameToAutosaveName | 檔案名稱對應至自動儲存的檔名。 |
m_mapDocNameToDocumentPtr | 檔名稱與 CDocument 指標的對應。 |
m_mapDocNameToRestoreBool | 檔名稱的對應至布爾參數,指出是否要還原自動儲存的檔。 |
m_mapDocumentPtrToDocName | 檔名稱指標 CDocument 的對應。 |
m_mapDocumentPtrToDocTitle | 檔標題指標 CDocument 的對應。 這些標題用於儲存盤案。 |
m_nAutosaveInterval | 自動儲存之間的時間以毫秒為單位。 |
m_nTimerID | 自動儲存定時器的識別碼。 |
m_strAutosavePath | 儲存自動儲存檔的位置。 |
m_strRestartIdentifier | 重新啟動管理員之 GUID 的字串表示。 |
備註
重新啟動管理員會 CDataRecoveryHandler
使用 類別來追蹤所有開啟的檔,並視需要自動儲存檔。 若要啟用自動儲存,請使用 CDataRecoveryHandler::SetSaveDocumentInfoOnIdle 方法。 這個方法會 CDataRecoveryHandler
指示 在下一個閑置迴圈上執行自動儲存。 重新啟動管理員會在 應該執行自動儲存時CDataRecoveryHandler
呼叫 SetSaveDocumentInfoOnIdle
。
類別的所有方法 CDataRecoveryHandler
都是虛擬的。 覆寫此類別中的 方法,以建立您自己的自定義數據復原處理程式。 除非您建立自己的數據復原處理程式或重新啟動管理員,否則請勿具現化 CDataRecoveryHandler。 CWinApp 類別會視需要建立CDataRecoveryHandler
物件。
您必須先呼叫 CDataRecoveryHandler::Initialize,才能使用 CDataRecoveryHandler
物件。
因為 類別 CDataRecoveryHandler
與重新啟動管理員緊密連接, CDataRecoveryHandler
因此取決於全域參數 m_dwRestartManagerSupportFlags
。 此參數會決定重新啟動管理員擁有哪些許可權,以及它與應用程式互動的方式。 若要將重新啟動管理員併入現有的應用程式,您必須在主要應用程式的建構函式中指派 m_dwRestartManagerSupportFlags
適當的值。 如需如何使用重新啟動管理員的詳細資訊,請參閱 如何:新增重新啟動管理員支援。
需求
標頭: afxdatarecovery.h
CDataRecoveryHandler::AutosaveAllDocumentInfo
自動儲存向 CDataRecoveryHandler
類別註冊的每個檔案。
virtual BOOL AutosaveAllDocumentInfo();
傳回值
如果 CDataRecoveryHandler
儲存了所有檔,則為TRUE;如果未儲存任何檔,則為 FALSE。
備註
如果沒有必須儲存的文件,這個方法會傳回 TRUE。 如果擷取 CWinApp
或 CDocManager
應用程式會產生錯誤,它也會傳回 TRUE,而不儲存任何檔。
若要使用此方法,必須在 中 m_dwRestartManagerSupportFlags
設定AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTART或AFX_RESTART_MANAGER_AUTOSAVE_AT_INTERVAL。 如需詳細資訊,請參閱 如何:新增重新啟動管理員支援。
CDataRecoveryHandler::AutosaveDocumentInfo
自動儲存指定的檔。
virtual BOOL AutosaveDocumentInfo(
CDocument* pDocument,
BOOL bResetModifiedFlag = TRUE);
參數
pDocument
[in]要儲存的 CDocument
指標。
bResetModifiedFlag
[in]TRUE 表示 CDataRecoveryHandler
將考慮 修改 pDocument ;FALSE 表示架構會將 pDocument 視為未修改。 如需此旗標之效果的詳細資訊,請參閱一節。
傳回值
如果已設定適當的旗標,且 pDocument 是有效的 CDocument
物件,則為 TRUE。
備註
每個 CDocument
物件都有一個旗標,指出它自上次儲存之後是否已變更。 使用 CDocument::IsModified 來判斷此旗標的狀態。 CDocument
如果 自上次儲存后尚未變更,請AutosaveDocumentInfo
刪除該檔的任何自動儲存盤案。 如果檔自上次儲存之後已變更,關閉它就會提示使用者先儲存檔再關閉。
注意
使用 bResetModifiedFlag 將文件的狀態變更為未修改,可能會導致使用者遺失未儲存的數據。 如果架構將檔案視為未修改,請關閉它並不會提示用戶儲存。
如果 pDocument 不是有效的CDocument
對象,這個方法會擲回 ASSERT 的例外狀況巨集。
若要使用此方法,必須在 m_dwRestartManagerSupportFlags 中設定AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTART或AFX_RESTARTMANAGER_AUTOSAVE_AT_INTERVAL。
CDataRecoveryHandler::CDataRecoveryHandler
建構 CDataRecoveryHandler
物件。
CDataRecoveryHandler(
DWORD dwRestartManagerSupportFlags,
int nAutosaveInterval);
參數
dwRestartManagerSupportFlags
[in]指出支援重新啟動管理員的選項。
nAutosaveInterval
[in]自動儲存之間的時間。 此參數以毫秒為單位。
備註
當您使用 [新增專案精靈] 時,MFC 架構會自動為您的應用程式建立 CDataRecoveryHandler
物件。 除非您自定義數據復原行為或重新啟動管理員,否則不應該建立 CDataRecoveryHandler
物件。
CDataRecoveryHandler::CreateDocumentInfo
將檔案加入至開啟的檔案清單。
virtual BOOL CreateDocumentInfo(CDocument* pDocument);
參數
pDocument
[in]的 CDocument
指標。 此方法會為此 CDocument
建立文件資訊。
傳回值
默認實作會傳回 TRUE。
備註
這個方法會先檢查 pDocument 是否已經在檔案清單中,再新增檔。 如果 pDocument 已經在清單中,這個方法會刪除與 pDocument 相關聯的自動儲存檔案。
若要使用此方法,必須在 m_dwRestartManagerSupportFlags 中設定AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTART或AFX_RESTARTMANAGER_AUTOSAVE_AT_INTERVAL。
CDataRecoveryHandler::D eleteAllAutosavedFiles
刪除所有目前自動儲存的檔案。
virtual BOOL DeleteAllAutosavedFiles();
傳回值
默認實作一律會傳回 TRUE。
CDataRecoveryHandler::D eleteAutosavedFile
刪除指定的自動儲存檔案。
virtual BOOL DeleteAutosavedFile(const CString& strAutosavedFile);
參數
strAutosavedFile
[in]包含自動儲存檔名的字串。
傳回值
默認實作一律會傳回 TRUE。
備註
如果這個方法無法刪除自動儲存的檔案,它會將檔案的名稱儲存在清單中。 的解構函式 CDataRecoveryHandler
會嘗試刪除該清單中指定的每個自動儲存檔案。
CDataRecoveryHandler::GenerateAutosaveFileName
產生與所提供檔檔名相關聯之自動儲存檔案的名稱。
virtual CString GenerateAutosaveFileName(const CString& strDocumentName) const;
參數
strDocumentName
[in]包含檔案名稱的字串。 GenerateAutosaveFileName
會使用此檔名稱來產生對應的自動儲存檔名。
傳回值
從 strDocumentName 產生的自動儲存檔名。
備註
每個檔名稱都有一對一對應,具有自動儲存檔名。
CDataRecoveryHandler::GetAutosaveInterval
傳回自動儲存嘗試之間的間隔。
virtual int GetAutosaveInterval() const;
傳回值
自動儲存嘗試之間的毫秒數。
CDataRecoveryHandler::GetAutosavePath
傳回自動儲存檔案的路徑。
virtual CString GetAutosavePath() const;
傳回值
儲存自動儲存檔的位置。
CDataRecoveryHandler::GetDocumentListName
從 CDocument
物件擷取檔名稱。
virtual CString GetDocumentListName(CDocument* pDocument) const;
參數
pDocument
[in]的 CDocument
指標。 GetDocumentListName
從這個 CDocument
擷取檔名稱。
傳回值
pDocument 中的文件名稱。
備註
會CDataRecoveryHandler
使用檔名稱作為m_mapDocNameToAutosaveName、m_mapDocNameToDocumentPtr和m_mapDocNameToRestoreBool中的索引鍵。 這些參數可讓 CDataRecoveryHandler
監視 CDocument
物件、自動儲存檔名和自動儲存設定。
CDataRecoveryHandler::GetNormalDocumentTitle
擷取指定檔的一般標題。
virtual CString GetNormalDocumentTitle(CDocument* pDocument);
參數
pDocument
[in]的 CDocument
指標。
傳回值
指定檔的一般標題。
備註
檔的一般標題通常是沒有路徑的檔檔名。 這是 [另存新檔] 對話方塊之 [檔名] 欄位中的標題。
CDataRecoveryHandler::GetRecoveredDocumentTitle
建立並傳回已復原文件的標題。
virtual CString GetRecoveredDocumentTitle(const CString& strDocumentTitle) const;
參數
strDocumentTitle
[in]檔的一般標題。
傳回值
已復原的文件標題。
備註
根據預設,文件復原的標題是附加 [已復原] 的一般標題。 復原的標題會在查詢使用者以還原自動儲存的檔時 CDataRecoveryHandler
向用戶顯示。
CDataRecoveryHandler::GetRestartIdentifier
擷取應用程式的唯一重新啟動標識碼。
virtual CString GetRestartIdentifier() const;
傳回值
唯一的重新啟動標識碼。
備註
每次執行應用程式時,重新啟動識別碼都是唯一的。
會將 CDataRecoveryHandler
目前開啟文件的相關信息儲存在登錄中。 當重新啟動管理員結束應用程式並重新啟動應用程式時,它會提供重新啟動識別碼給 CDataRecoveryHandler
。 CDataRecoveryHandler
會使用重新啟動標識符來擷取先前開啟的檔案清單。 這可讓 CDataRecoveryHandler
嘗試尋找及還原自動儲存的檔案。
CDataRecoveryHandler::GetSaveDocumentInfoOnIdle
指出 是否 CDataRecoveryHandler
在目前的閑置迴圈上執行自動儲存。
virtual BOOL GetSaveDocumentInfoOnIdle() const;
傳回值
TRUE 表示 CDataRecoveryHandler
目前閒置迴圈上的自動儲存;FALSE 表示它沒有。
CDataRecoveryHandler::GetShutdownByRestartManager
指出重新啟動管理員是否導致應用程式結束。
virtual BOOL GetShutdownByRestartManager() const;
傳回值
TRUE 表示重新啟動管理員導致應用程式結束;FALSE 表示它沒有。
CDataRecoveryHandler::Initialize
初始化 CDataRecoveryHandler
。
virtual BOOL Initialize();
傳回值
如果初始化成功,則為TRUE;否則為 FALSE。
備註
初始化程式會載入路徑,以便從登錄儲存自動儲存盤案。 Initialize
如果方法找不到此目錄,或路徑為 NULL,Initialize
則失敗並傳FALSE
回 。
使用 CDataRecoveryHandler::SetAutosavePath 在應用程式初始化 CDataRecoveryHandler
之後變更自動儲存路徑。
方法 Initialize
也會啟動定時器,以在下次自動儲存發生時監視。 使用 CDataRecoveryHandler::SetAutosaveInterval 變更應用程式初始化 CDataRecoveryHandler
後的自動儲存間隔。
CDataRecoveryHandler::QueryRestoreAutosavedDocuments
針對自動儲存的每個檔 CDataRecoveryHandler
,向用戶顯示對話方塊。 對話框會決定使用者是否要還原自動儲存的檔。
virtual void QueryRestoreAutosavedDocuments();
備註
如果您的應用程式是 Unicode,這個方法就會向用戶顯示 CTaskDialog 。 否則,架構會使用 AfxMessageBox 來查詢使用者。
收集使用者的所有回應之後 QueryRestoreAutosavedDocuments
,它會將資訊儲存在成員變數 中m_mapDocNameToRestoreBool。 此方法不會還原自動儲存的檔。
CDataRecoveryHandler::ReadOpenDocumentList
從登錄載入開啟的檔案清單。
virtual BOOL ReadOpenDocumentList();
傳回值
TRUE 表示 ReadOpenDocumentList
從登錄載入至少一份文件的資訊;FALSE 表示未載入任何文件資訊。
備註
此函式會從登錄載入開啟的文件資訊,並將它儲存在成員變數 中m_mapDocNameToAutosaveName。
載入所有數據之後 ReadOpenDocumentList
,它會從登錄中刪除檔資訊。
CDataRecoveryHandler::RemoveDocumentInfo
從開啟的檔案清單中移除提供的檔。
virtual BOOL RemoveDocumentInfo(CDocument* pDocument);
參數
pDocument
[in]要移除之文件的指標。
傳回值
如果 pDocument 已從清單中移除,則為 TRUE;如果發生錯誤,則為 FALSE。
備註
當使用者關閉檔時,架構會使用此方法從開啟的檔案清單中移除它。
如果在 RemoveDocumentInfo
開啟的文件清單中找不到 pDocument ,則不會執行任何動作並傳回 TRUE。
若要使用此方法,必須在 m_dwRestartManagerSupportFlags 中設定AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES。
CDataRecoveryHandler::ReopenPreviousDocuments
開啟先前開啟的檔。
virtual BOOL ReopenPreviousDocuments();
傳回值
如果至少開啟一份檔,則為TRUE;否則為 FALSE。
備註
這個方法會開啟先前開啟之檔的最新儲存。 如果檔未儲存或自動儲存, ReopenPreviousDocuments
請根據該檔類型的範本開啟空白檔。
若要使用此方法,必須在 m_dwRestartManagerSupportFlags 中設定AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES。 如果未設定此參數, ReopenPreviousDocuments
則不會執行任何動作並傳回 FALSE。
如果先前開啟的檔案清單中沒有儲存的檔, ReopenPreviousDocuments
則不會執行任何動作並傳回 FALSE。
CDataRecoveryHandler::RestoreAutosavedDocuments
根據使用者輸入還原自動儲存的檔。
virtual BOOL RestoreAutosavedDocuments();
傳回值
如果此方法成功還原檔,則為TRUE。
備註
此方法會呼叫 CDataRecoveryHandler::QueryRestoreAutosavedDocuments 來判斷使用者想要還原的檔。 如果使用者決定不還原自動儲存的檔, RestoreAutosavedDocuments
請刪除自動儲存盤案。 否則, RestoreAutosavedDocuments
將開啟的檔取代為自動儲存的版本。
若要使用此方法,必須在 中 m_dwRestartManagerSupportFlags
設定AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES或AFX_RESTART_MANAGER_RESTORE_AUTOSAVED_FILES。
CDataRecoveryHandler::SaveOpenDocumentList
將目前開啟的檔案清單儲存至 Windows 登錄。
virtual BOOL SaveOpenDocumentList();
傳回值
TRUE 是表示 如果沒有要儲存的開啟檔,或成功儲存檔則為 TRUE。 如果有檔要儲存至登錄,但因為發生錯誤而未儲存,則為 FALSE。
備註
重新啟動管理員 SaveOpenDocumentList
會在應用程式意外結束或升級結束時呼叫。 當應用程式重新啟動時,它會使用 CDataRecoveryHandler::ReadOpenDocumentList 來擷取開啟的檔案清單。
這個方法只會儲存開啟的檔案清單。 CDataRecoveryHandler::AutosaveDocumentInfo 方法負責儲存檔本身。
CDataRecoveryHandler::SetAutosaveInterval
設定自動儲存週期之間的時間,以毫秒為單位。
Virtual void SetAutosaveInterval(int nAutosaveInterval);
參數
nAutosaveInterval
[in]新的自動儲存間隔以毫秒為單位。
CDataRecoveryHandler::SetAutosavePath
設定儲存自動儲存盤案的目錄。
virtual void SetAutosavePath(const CString& strAutosavePath);
參數
strAutosavePath
[in]儲存自動儲存盤案的路徑。
備註
變更自動儲存目錄並不會移動目前自動儲存的檔案。
CDataRecoveryHandler::SetRestartIdentifier
設定這個實例 CDataRecoveryHandler
的唯一重新啟動標識符。
virtual void SetRestartIdentifier(const CString& strRestartIdentifier);
參數
strRestartIdentifier
[in]重新啟動管理員的唯一標識碼。
備註
重新啟動管理員會記錄登錄中開啟文件的相關信息。 此資訊會以唯一的重新啟動標識符儲存為金鑰。 因為應用程式的每個實例的重新啟動標識碼都是唯一的,因此應用程式的多個實例可能會意外結束,而且重新啟動管理員可以復原每個實例。
CDataRecoveryHandler::SetSaveDocumentInfoOnIdle
設定 是否會 CDataRecoveryHandler
在目前的閑置週期期間將開啟的文件資訊儲存至 Windows 登錄。
virtual void SetSaveDocumentInfoOnIdle(BOOL bSaveOnIdle);
參數
bSaveOnIdle
[in]TRUE 表示在目前的閑置週期內儲存文件資訊;FALSE 表示不執行儲存。
CDataRecoveryHandler::SetShutdownByRestartManager
設定應用程式先前的結束是否由重新啟動管理員所造成。
virtual void SetShutdownByRestartManager(BOOL bShutdownByRestartManager);
參數
bShutdownByRestartManager
[in]TRUE 表示重新啟動管理員導致應用程式結束;FALSE 表示應用程式因其他原因而結束。
備註
架構的行為會根據先前的結束是否非預期或重新啟動管理員起始它的方式不同。
CDataRecoveryHandler::UpdateDocumentInfo
更新文件的信息,因為使用者已儲存檔。
virtual BOOL UpdateDocumentInfo(CDocument* pDocument);
參數
pDocument
[in]已儲存檔的指標。
傳回值
如果此方法刪除自動儲存的檔並更新檔資訊,則為TRUE;如果發生錯誤,則為 FALSE。
備註
當使用者儲存檔時,應用程式會移除自動儲存的檔案,因為它已不再需要。 UpdateDocumentInfo
藉由呼叫 CDataRecoveryHandler::RemoveDocumentInfo 來刪除自動儲存的檔案。 UpdateDocumentInfo
接著,將 pDocument 中的資訊新增至目前開啟的檔案清單,因為 RemoveDocumentInfo
會刪除該資訊,但已儲存的檔仍然開啟。
若要使用此方法,必須在 m_dwRestartManagerSupportFlags 中設定AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES。