MFC - 檔案系統



在本章中,我們將討論檔案系統的各個組成部分。

驅動器

驅動器是連線到計算機的物理裝置,以便儲存資訊。邏輯磁碟、邏輯卷或虛擬磁碟(簡稱 VD 或 vdisk)是一種虛擬裝置,它在計算機系統中的一個或多個物理磁碟驅動器上提供可用儲存容量的區域。驅動器可以是硬碟、CD-ROM、DVD-ROM、快閃記憶體(USB)驅動器、儲存卡等。

您想要執行的主要操作之一是獲取計算機上的驅動器列表。

讓我們透過建立一個新的基於 MFC 對話方塊的應用程式來了解一個簡單的示例。

步驟 1 - 從工具箱中拖動一個按鈕,將其標題更改為“獲取驅動器資訊”。

步驟 2 - 刪除靜態控制元件(TODO 行)的標題,並將其 ID 更改為 IDC_STATIC_TEXT。

Static Caption

步驟 3 - 右鍵單擊按鈕,然後選擇“新增事件處理程式”。

Static Caption

步驟 4 - 選擇 BN_CLICKED 訊息型別,然後單擊“新增和編輯”按鈕。

步驟 5 - 為靜態文字控制元件新增值變數 m_strDrives。

Static Caption

為了支援計算機上的驅動器,Win32 庫提供了 Microsoft Window 的 GetLogicalDrives() 函式,該函式將檢索當前計算機上所有驅動器的列表。

步驟 6 - 編譯並執行上述程式碼後,您將看到以下輸出。

Static Caption

步驟 7 - 單擊按鈕時,您可以看到計算機上的所有驅動器。

Static Caption

目錄

在計算中,目錄是檔案系統編目結構,其中包含對其他計算機檔案的引用,以及可能包含其他目錄。目錄是一個物理位置。它可以處理驅動器上不可用的操作。

讓我們透過建立一個新的基於 MFC 對話方塊的應用程式來了解一個簡單的示例

步驟 1 - 從工具箱中拖動三個按鈕。將其標題更改為“建立目錄”、“刪除目錄”和“移動目錄”。

步驟 2 - 將這些按鈕的 ID 更改為IDC_BUTTON_CREATEIDC_BUTTON_DELETEIDC_BUTTON_MOVE

步驟 3 - 刪除 TODO 行。

Directories

步驟 4 - 為每個按鈕新增事件處理程式。

步驟 5 - 要建立目錄,您可以呼叫 Win32 庫的 CreateDirectory() 方法。

步驟 6 - 這是建立按鈕事件處理程式的實現,我們將在其中建立一個目錄,然後建立另外兩個子目錄。

void CMFCDirectoriesDemoDlg::OnBnClickedButtonCreate() {
   // TODO: Add your control notification handler code here
   SECURITY_ATTRIBUTES saPermissions;

   saPermissions.nLength = sizeof(SECURITY_ATTRIBUTES);
   saPermissions.lpSecurityDescriptor = NULL;
   saPermissions.bInheritHandle = TRUE;

   if (CreateDirectory(L"D:\\MFCDirectoryDEMO", &saPermissions) == TRUE)
      AfxMessageBox(L"The directory was created.");
   CreateDirectory(L"D:\\MFCDirectoryDEMO\\Dir1", NULL);
   CreateDirectory(L"D:\\MFCDirectoryDEMO\\Dir2", NULL);
}

步驟 7 - 要刪除目錄,您可以呼叫 Win32 庫的RemoveDirectory() 函式。這是刪除按鈕事件處理程式的實現。

void CMFCDirectoriesDemoDlg::OnBnClickedButtonDelete() {
   // TODO: Add your control notification handler code here
   if (RemoveDirectory(L"D:\\MFCDirectoryDEMO\\Dir1") == TRUE)
      AfxMessageBox(L"The directory has been deleted");
}

步驟 8 - 如果您想移動目錄,您也可以呼叫相同的 MoveFile() 函式。這是移動按鈕事件處理程式的實現,我們將在其中首先建立新的目錄,然後將 Dir2 移動到該目錄。

void CMFCDirectoriesDemoDlg::OnBnClickedButtonMove() {
   // TODO: Add your control notification handler code here
   CreateDirectory(L"D:\\MFCDirectory", NULL);

   if (MoveFile(L"D:\\MFCDirectoryDEMO\\Dir1", L"D:\\MFCDirectory\\Dir1") == TRUE)
      AfxMessageBox(L"The directory has been moved");
}

步驟 9 - 編譯並執行上述程式碼後,您將看到以下輸出。

Directories

步驟 10 - 單擊“建立目錄”按鈕時,它將建立這些目錄。

Directories

步驟 11 - 單擊“刪除目錄”按鈕時,它將刪除 Dir1。

Directories

檔案處理

MFC 應用程式中的大多數檔案處理都是與名為CArchive的類結合執行的。CArchive 類充當應用程式與用於儲存資料或使其可用的介質之間的中繼。它允許您以持久二進位制形式(通常是磁碟儲存)儲存複雜的網路物件,這些物件在這些物件被刪除後仍然存在。

以下是 CArchive 類中的方法列表 -

以下是用於儲存和檢索資料的運算子列表

序號 名稱和說明
1

operator <<

將物件和基本型別儲存到存檔中。

2

operator >>

從存檔中載入物件和基本型別。

讓我們透過建立一個新的基於 MFC 對話方塊的應用程式來了解一個簡單的示例。

步驟 1 - 拖動一個編輯控制元件和兩個按鈕,如下面的快照所示。

New MFC

步驟 2 - 為編輯控制元件新增控制元件變數m_editCtrl和值變數m_strEdit

步驟 3 - 為“開啟”和“儲存”按鈕新增單擊事件處理程式。

步驟 4 - 以下是事件處理程式的實現。

void CMFCFileProcessingDlg::OnBnClickedButtonOpen() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   
   CFile file;
   
   file.Open(L"ArchiveText.rpr", CFile::modeRead);
   if(file) {
      CArchive ar(&file, CArchive::load);
   
      ar >> m_strEdit;
   
      ar.Close();
      file.Close();
   }
   UpdateData(FALSE);
}

void CMFCFileProcessingDlg::OnBnClickedButtonSave() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);

   if (m_strEdit.GetLength() == 0) {
      AfxMessageBox(L"You must enter the name of the text.");
      return;
   }
   CFile file;
   
   file.Open(L"ArchiveText.rpr", CFile::modeCreate | CFile::modeWrite);
   CArchive ar(&file, CArchive::store);
   ar << m_strEdit;
   
   ar.Close();
   file.Close();
}

步驟 5 - 編譯並執行上述程式碼後,您將看到以下輸出。

New MFC

步驟 6 - 輸入一些內容並單擊“儲存”。它將以二進位制格式儲存資料。

New MFC

步驟 7 - 從編輯控制元件中刪除文字。當您單擊“開啟”時,請注意相同的文字再次載入。

廣告