MFC – 文件系统
MFC – 文件系统
在本章中,我们将讨论文件系统的各个组件。
驱动器
甲驱动是连接到计算机,以便它能够存储信息的物理装置。逻辑磁盘、逻辑卷或虚拟磁盘(简称 VD 或 vdisk)是一种在计算机系统中的一个或多个物理磁盘驱动器上提供可用存储容量区域的虚拟设备。驱动器可以是硬盘、CD ROM、DVD ROM、闪存 (USB) 驱动器、存储卡等。
您要执行的主要操作之一是获取计算机上的驱动器列表。
让我们通过创建一个新的基于 MFC 对话框的应用程序来查看一个简单的示例。
步骤 1 – 从工具箱中拖动一个按钮,将其标题更改为获取驱动器信息。
步骤 2 – 删除静态控件的标题(TODO 行)并将其 ID 更改为 IDC_STATIC_TEXT。

步骤 3 – 右键单击按钮并选择添加事件处理程序。

步骤 4 – 选择 BN_CLICKED 消息类型,然后单击添加和编辑按钮。
步骤 5 – 为静态文本控件添加值变量 m_strDrives。

为了支持计算机上的驱动器,Win32 库提供了 Microsoft Window 的 GetLogicalDrives() 函数,该函数将检索当前计算机上所有驱动器的列表。
Step 6 – 编译并执行上述代码后,您将看到以下输出。

步骤 7 – 当您单击按钮时,您可以看到计算机上的所有驱动器。

目录
在计算中,目录是一种文件系统编目结构,其中包含对其他计算机文件的引用,可能还有其他目录。目录是一个物理位置。它可以处理驱动器上不可用的操作。
让我们通过创建一个新的基于 MFC 对话框的应用程序来看看一个简单的例子
步骤 1 – 从工具箱中拖动三个按钮。将他们的标题更改为创建目录、删除目录和移动目录。
步骤 2 – 将这些按钮的 ID 更改为IDC_BUTTON_CREATE、IDC_BUTTON_DELETE和IDC_BUTTON_MOVE。
步骤 3 – 删除 TODO 行。

第 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");
}
Step 9 – 编译并执行上述代码后,您将看到以下输出。

步骤 10 – 当您单击“创建目录”按钮时,它将创建这些目录。

步骤 11 – 当您单击删除目录按钮时,它将删除 Dir1。

文件处理
MFC 应用程序中的大多数文件处理是与名为CArchive的类一起执行的。CArchive 类充当应用程序和用于存储数据或使其可用的介质之间的中继。它允许您以永久二进制形式(通常是磁盘存储)保存复杂的对象网络,这些对象被删除后仍然存在。
这是 CArchive 类中的方法列表 –
这是用于存储和检索数据的运算符列表
| Sr.No. | 名称和描述 |
|---|---|
| 1 |
operator << 将对象和原始类型存储到存档中。 |
| 2 |
operator >> 从存档中加载对象和原始类型。 |
让我们通过创建一个新的基于 MFC 对话框的应用程序来查看一个简单的示例。
步骤 1 – 拖动一个编辑控件和两个按钮,如下面的快照所示。

步骤 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();
}
Step 5 – 编译并执行上述代码后,您将看到以下输出。

第 6 步– 写一些东西并点击保存。它将以二进制格式保存数据。

步骤 7 – 从编辑控件中删除测试。当您单击打开时,观察再次加载相同的文本。