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

步骤3 - 右键单击按钮,然后选择添加事件处理程序。

步骤4 - 选择BN_CLICKED消息类型,然后单击"Add and Edit"按钮。
步骤5 - 为静态文本控件添加值变量m_strDrives。

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

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

Directories目录
在计算中,目录是文件系统的目录结构,其中包含对其他计算机文件以及可能对其他目录的引用。
通过创建一个新的基于MFC对话框的应用程序来研究一个简单的示例
步骤1 - 从工具箱中拖动三个按钮,更改其标题以创建目录,删除目录和移动目录。
步骤2 - 将这些按钮的ID更改为 IDC_BUTTON_CREATE , IDC_BUTTON_DELETE 和 IDC_BUTTON_MOVE 。
步骤3 - 删除TODO行。

步骤4 -为每个按钮添加事件处理程序。
步骤5 - 要创建目录,可以调用Win32库的CreateDirectory()方法。
步骤6 - 这是"Crete"按钮事件处理程序的实现,将在其中创建一个目录,然后再创建两个子目录。
Directories
步骤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 - 编译并执行上述代码后,您将看到以下输出。

步骤10 - 单击"Create Directory"按钮时,它将创建这些目录。

步骤11 - 单击"Delete Directory"按钮时,它将删除Dir1。

File文件
MFC应用程序中的大多数文件处理是与名为 CArchive 的类一起执行的。 CArchive类充当应用程序和用于存储数据或使其可用的介质之间的中继,它允许永久的二进制形式(通常是磁盘存储)保存对象。
这是CArchive类中的方法列表-
这是用于存储和检索数据的运算符的列表
| Sr.No. | Name & 描述 |
|---|---|
| 1 |
operator << 将对象和原始类型存储到存档中。 |
| 2 |
operator >> 从档案库加载对象和原始类型。 |
让无涯教程通过创建一个新的基于MFC对话框的应用程序来研究一个简单的示例。拖动一个编辑控件和两个按钮,如以下快照所示。

步骤1 - 为"Open"和"Save"按钮添加单击事件处理程序。
步骤2 - 这是事件处理程序的实现。
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 </span><span class="pun">>></span><span class="pln"> m_strEdit</span><span class="pun">;</span><span class="pln">
ar</span><span class="pun">.</span><span class="typ">Close</span><span class="pun">();</span><span class="pln">
file</span><span class="pun">.</span><span class="typ">Close</span><span class="pun">();</span><span class="pln">
}
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();
}
步骤3 - 编译并执行上述代码后,您将看到以下输出。

步骤4 - 写点东西,然后单击"Save"。它将以二进制格式保存数据。

步骤5 - 从编辑控件中删除测试。单击"Open"时,观察到再次加载了相同的文本。