MFC - Файловая система
В этой главе мы обсудим различные компоненты файловой системы.
Диски
А driveэто физическое устройство, подключенное к компьютеру для хранения информации. Логический диск, логический том или виртуальный диск (для краткости VD или vdisk) - это виртуальное устройство, которое предоставляет область полезной емкости хранения на одном или нескольких физических дисках в компьютерной системе. Приводом может быть жесткий диск, CD-ROM, DVD-ROM, флэш-накопитель (USB), карта памяти и т. Д.
Одна из основных операций, которую вы захотите выполнить, - это получить список дисков на компьютере.
Давайте рассмотрим простой пример, создав новое приложение на основе диалогового окна MFC.
Step 1 - Перетащите одну кнопку с панели инструментов, измените ее заголовок, чтобы получить информацию о дисках.
Step 2 - Удалите заголовок статического элемента управления (строка TODO) и измените его идентификатор на IDC_STATIC_TEXT.
Step 3 - Щелкните кнопку правой кнопкой мыши и выберите «Добавить обработчик событий».
Step 4 - Выберите тип сообщения BN_CLICKED и нажмите кнопку «Добавить и изменить».
Step 5 - Добавьте значение переменной m_strDrives для управления статическим текстом.
Для поддержки дисков на компьютере библиотека Win32 предоставляет функцию GetLogicalDrives () окна Microsoft Window, которая извлекает список всех дисков на текущем компьютере.
Step 6 - Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий результат.
Step 7 - Когда вы нажимаете кнопку, вы можете увидеть все диски на вашем компьютере.
Справочники
В вычислениях directory- это структура каталогизации файловой системы, которая содержит ссылки на другие компьютерные файлы и, возможно, другие каталоги. Каталог - это физическое местоположение. Он может обрабатывать операции, недоступные на диске.
Давайте рассмотрим простой пример, создав новое приложение на основе диалогового окна MFC.
Step 1- Перетащите три кнопки из панели инструментов. Измените их заголовки на «Создать каталог», «Удалить каталог» и «Переместить каталог».
Step 2 - Измените идентификаторы этих кнопок на IDC_BUTTON_CREATE, IDC_BUTTON_DELETE и IDC_BUTTON_MOVE.
Step 3 - Удалите строку TODO.
Step 4 - Добавить обработчик событий для каждой кнопки.
Step 5 - Чтобы создать каталог, вы можете вызвать метод CreateDirectory () библиотеки Win32.
Step 6 - Вот реализация обработчика событий кнопки Create, в которой мы создадим один каталог, а затем еще два подкаталога.
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);
}
Step 7 - Чтобы избавиться от каталога, вы можете позвонить в RemoveDirectory()функция библиотеки Win32. Вот реализация обработчика события кнопки удаления.
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");
}
Step 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 - Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий результат.
Step 10 - Когда вы нажимаете кнопку «Создать каталог», он создает эти каталоги.
Step 11 - Когда вы нажимаете кнопку «Удалить каталог», он удаляет файл Dir1.
Обработка файлов
Большинство из file processing в приложении MFC выполняется вместе с классом с именем CArchive. Класс CArchive служит связующим звеном между приложением и средой, используемой для хранения данных или их доступности. Он позволяет сохранять сложную сеть объектов в постоянной двоичной форме (обычно на диске), которая сохраняется после удаления этих объектов.
Вот список методов в классе CArchive -
Sr. No. | Имя и описание |
---|---|
1 | Abort Закрывает архив без исключения. |
2 | Close Удаляет незаписанные данные и отключается от CFile. |
3 | Flush Удаляет незаписанные данные из буфера архива. |
4 | GetFile Получает указатель на объект CFile для этого архива. |
5 | GetObjectSchema Вызывается из Serialize для определения версии десериализуемого объекта. |
6 | IsBufferEmpty Определяет, был ли очищен буфер в процессе получения сокетов Windows. |
7 | IsLoading Определяет, загружается ли архив. |
8 | IsStoring Определяет, хранится ли архив. |
9 | MapObject Помещает на карту объекты, которые не сериализованы в файл, но доступны для ссылок подобъектов. |
10 | Read Читает необработанные байты. |
11 | ReadClass Читает ссылку на класс, ранее сохраненную с WriteClass. |
12 | ReadObject Вызывает функцию Serialize объекта для загрузки. |
13 | ReadString Читает одну строку текста. |
14 | SerializeClass Читает или записывает ссылку на класс на объект CArchive в зависимости от направления CArchive. |
15 | SetLoadParams Устанавливает размер, до которого увеличивается массив нагрузки. Должен вызываться перед загрузкой любого объекта или доMapObject или же ReadObject называется. |
16 | SetObjectSchema Устанавливает схему объекта, хранящуюся в архивном объекте. |
17 | SetStoreParams Устанавливает размер хэш-таблицы и размер блока карты, используемой для идентификации уникальных объектов в процессе сериализации. |
18 | Write Записывает необработанные байты. |
19 | WriteClass Пишет ссылку на CRuntimeClass в архив CArchive. |
20 | WriteObject Вызывает функцию Serialize объекта для сохранения. |
21 год | WriteString Записывает одну строку текста. |
Вот список операторов, используемых для хранения и извлечения данных.
Sr. No. | Имя и описание |
---|---|
1 | operator << Хранит объекты и примитивные типы в архиве. |
2 | operator >> Загружает объекты и примитивные типы из архива. |
Давайте рассмотрим простой пример, создав новое приложение на основе диалогового окна MFC.
Step 1 - Перетащите один элемент редактирования и две кнопки, как показано на следующем снимке.
Step 2 - Добавить контрольную переменную m_editCtrl и значение переменной m_strEdit для редактирования.
Step 3 - Добавить обработчик событий щелчка для кнопок «Открыть» и «Сохранить».
Step 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 - Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий результат.
Step 6- Напишите что-нибудь и нажмите Сохранить. Он сохранит данные в двоичном формате.
Step 7- Удалить тест из поля редактирования. Когда вы нажимаете «Открыть», обратите внимание, что тот же текст загружается снова.