Учебники

MFC — Файловая система

В этой главе мы обсудим различные компоненты файловой системы.

приводы

Диск — это физическое устройство, подключенное к компьютеру, чтобы хранить информацию. Логический диск, логический том или виртуальный диск (сокращенно VD или vdisk) — это виртуальное устройство, которое предоставляет область полезной емкости на одном или нескольких физических дисках в компьютерной системе. Накопитель может быть жестким диском, CD-ROM, DVD-ROM, флэш-накопителем (USB), картой памяти и т. Д.

Одной из основных операций, которую вы хотите выполнить, является получение списка дисков на компьютере.

Давайте рассмотрим простой пример, создав новое приложение на основе диалогового окна MFC.

Шаг 1 — Перетащите одну кнопку из панели инструментов, измените ее заголовок на Get Drives Info.

Шаг 2 — Удалите заголовок Статический элемент управления (строка TODO) и измените его ID на IDC_STATIC_TEXT.

Статическая подпись

Шаг 3 — Щелкните правой кнопкой мыши на кнопке и выберите «Добавить обработчик событий».

Статическая подпись

Шаг 4 — Выберите тип сообщения BN_CLICKED и нажмите кнопку «Добавить и изменить».

Шаг 5 — Добавьте переменную значения m_strDrives для элемента управления Static Text.

Статическая подпись

Для поддержки дисков на компьютере библиотека Win32 предоставляет функцию GetLogicalDrives () Microsoft Window, которая извлекает список всех дисков на текущем компьютере.

Шаг 6 — Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий вывод.

Статическая подпись

Шаг 7 — Когда вы нажимаете кнопку, вы можете увидеть все диски на вашем компьютере.

Статическая подпись

Справочники

В вычислительной технике каталог — это структура каталогизации файловой системы, которая содержит ссылки на другие компьютерные файлы и, возможно, другие каталоги. Каталог — это физическое местоположение. Он может обрабатывать операции, недоступные на диске.

Давайте рассмотрим простой пример, создав новое приложение на основе диалогового окна MFC.

Шаг 1 — Перетащите три кнопки из панели инструментов. Измените их подписи, чтобы создать каталог, удалить каталог и переместить каталог.

Шаг 2 — Измените идентификаторы этих кнопок на IDC_BUTTON_CREATE , IDC_BUTTON_DELETE и IDC_BUTTON_MOVE .

Шаг 3 — Удалить строку TODO.

Справочники

Шаг 4 — Добавьте обработчик событий для каждой кнопки.

Шаг 5 — Чтобы создать каталог, вы можете вызвать метод CreateDirectory () библиотеки Win32.

Шаг 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 — Чтобы избавиться от каталога, вы можете вызвать функцию 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");
}

Шаг 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 — Когда вы нажмете кнопку «Создать каталог», он создаст эти каталоги.

Справочники

Шаг 11 — Когда вы нажимаете кнопку «Удалить каталог», он удаляет Dir1.

Справочники

Обработка файлов

Большая часть обработки файлов в приложении MFC выполняется совместно с классом CArchive . Класс CArchive служит ретранслятором между приложением и носителем, используемым либо для хранения данных, либо для их доступности. Это позволяет сохранять сложную сеть объектов в постоянной двоичной форме (обычно на диске), которая сохраняется после удаления этих объектов.

Вот список методов в классе CArchive —

выкинуть

Закрывает архив без исключения.

близко

Сбрасывает неписанные данные и отключается от CFile .

Промывать

Сбрасывает неписанные данные из буфера архива.

Получить файл

Получает указатель объекта CFile для этого архива.

GetObjectSchema

Вызывается из функции Serialize для определения версии десериализованного объекта.

IsBufferEmpty

Определяет, был ли очищен буфер во время процесса получения Windows Sockets.

IsLoading

Определяет, загружается ли архив.

IsStoring

Определяет, хранится ли архив.

MapObject

Помещает на карту объекты, которые не сериализованы в файл, но доступны для ссылки на подобъекты.

Читать

Читает сырые байты.

ReadClass

Читает ссылку на класс, ранее сохраненную с WriteClass .

ReadObject

Вызывает функцию Serialize объекта для загрузки.

ReadString

Читает одну строку текста.

SerializeClass

Читает или записывает ссылку на класс в объект CArchive в зависимости от направления CArchive.

SetLoadParams

Устанавливает размер, до которого растет массив загрузки. Должен вызываться перед загрузкой любого объекта или перед вызовом MapObject или ReadObject .

SetObjectSchema

Устанавливает схему объекта, хранящуюся в объекте архива.

SetStoreParams

Устанавливает размер хеш-таблицы и размер блока карты, используемой для идентификации уникальных объектов в процессе сериализации.

Написать

Пишет необработанные байты.

WriteClass

Записывает ссылку на CRuntimeClass в CArchive.

WriteObject

Вызывает функцию Serialize объекта для сохранения.

WriteString

Пишет одну строку текста.

Вот список операторов, используемых для хранения и извлечения данных

Sr.No. Имя и описание
1

оператор <<

Хранит объекты и типы примитивов в архиве.

2

оператор >>

Загружает объекты и примитивные типы из архива.

оператор <<

Хранит объекты и типы примитивов в архиве.

оператор >>

Загружает объекты и примитивные типы из архива.

Давайте рассмотрим простой пример, создав новое приложение на основе диалогового окна 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();
}

Шаг 5 — Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий вывод.

Новый МФЦ

Шаг 6 — Напишите что-нибудь и нажмите Сохранить. Это сохранит данные в двоичном формате.

Новый МФЦ

Шаг 7 — Удалить тест из редактирования управления. При нажатии кнопки «Открыть» обратите внимание, что тот же текст загружается снова.