分享方式:


CDataRecoveryHandler 類別

如果應用程式意外結束,會自動 CDataRecoveryHandler 儲存檔並加以還原。

語法

class CDataRecoveryHandler : public CObject

成員

建構函式

名稱 描述
CDataRecoveryHandler::CDataRecoveryHandler 建構 CDataRecoveryHandler 物件。

方法

名稱 描述
CDataRecoveryHandler::AutosaveAllDocumentInfo 自動儲存向 CDataRecoveryHandler 類別註冊的每個檔案。
CDataRecoveryHandler::AutosaveDocumentInfo 自動儲存指定的檔。
CDataRecoveryHandler::CreateDocumentInfo 將檔案加入至開啟的檔案清單。
CDataRecoveryHandler::D eleteAllAutosavedFiles 刪除所有目前自動儲存的檔案。
CDataRecoveryHandler::D eleteAutosavedFile 刪除指定的自動儲存檔案。
CDataRecoveryHandler::GenerateAutosaveFileName 產生與所提供檔檔名相關聯之自動儲存檔案的名稱。
CDataRecoveryHandler::GetAutosaveInterval 傳回自動儲存嘗試之間的間隔。
CDataRecoveryHandler::GetAutosavePath 傳回自動儲存檔案的路徑。
CDataRecoveryHandler::GetDocumentListName CDocument 物件擷取檔名稱。
CDataRecoveryHandler::GetNormalDocumentTitle 擷取指定檔的一般標題。
CDataRecoveryHandler::GetRecoveredDocumentTitle 建立並傳回已復原文件的標題。
CDataRecoveryHandler::GetRestartIdentifier 擷取應用程式的唯一重新啟動標識碼。
CDataRecoveryHandler::GetSaveDocumentInfoOnIdle 指出 是否 CDataRecoveryHandler 在目前的閑置迴圈上執行自動儲存。
CDataRecoveryHandler::GetShutdownByRestartManager 指出重新啟動管理員是否導致應用程式結束。
CDataRecoveryHandler::Initialize 初始化 CDataRecoveryHandler
CDataRecoveryHandler::QueryRestoreAutosavedDocuments 針對自動儲存的每個檔 CDataRecoveryHandler ,向用戶顯示對話方塊。 對話框會決定使用者是否要還原自動儲存的檔。
CDataRecoveryHandler::ReadOpenDocumentList 從登錄載入開啟的檔案清單。
CDataRecoveryHandler::RemoveDocumentInfo 從開啟的檔案清單中移除提供的檔。
CDataRecoveryHandler::ReopenPreviousDocuments 開啟先前開啟的檔。
CDataRecoveryHandler::RestoreAutosavedDocuments 根據使用者輸入還原自動儲存的檔。
CDataRecoveryHandler::SaveOpenDocumentList 將目前開啟的檔案清單儲存至 Windows 登錄。
CDataRecoveryHandler::SetAutosaveInterval 設定自動儲存週期之間的時間,以毫秒為單位。
CDataRecoveryHandler::SetAutosavePath 設定儲存自動儲存盤案的目錄。
CDataRecoveryHandler::SetRestartIdentifier 設定這個實例 CDataRecoveryHandler的唯一重新啟動標識符。
CDataRecoveryHandler::SetSaveDocumentInfoOnIdle 設定 是否會 CDataRecoveryHandler 在目前的閑置週期期間將開啟的文件資訊儲存至 Windows 登錄。
CDataRecoveryHandler::SetShutdownByRestartManager 設定應用程式先前的結束是否由重新啟動管理員所造成。
CDataRecoveryHandler::UpdateDocumentInfo 更新文件的信息,因為使用者已儲存檔。

資料成員

名稱 描述
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。 如果擷取 CWinAppCDocManager 應用程式會產生錯誤,它也會傳回 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_mapDocNameToAutosaveNamem_mapDocNameToDocumentPtrm_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 目前開啟文件的相關信息儲存在登錄中。 當重新啟動管理員結束應用程式並重新啟動應用程式時,它會提供重新啟動識別碼給 CDataRecoveryHandlerCDataRecoveryHandler會使用重新啟動標識符來擷取先前開啟的檔案清單。 這可讓 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。

另請參閱

類別
階層架構圖表
CObject 類別
如何:新增重新啟動管理員支援