Данные, полученные функцией FileSystemInfo, временно заносятся в строку strTmpOut класса CString. При этом используется метод Format, чтобы получить форматированную запись, содержащую дополнительное текстовое описание.

Для записи в файл мы создали объект класса CStdioFile. В конструкторе мы сразу указали имя файла, который надо создать и открыть. Все операции с файлом, включая его создание, выполняются в блоке try. В случае возникновении ошибки во время создания или других операций с файлом вызывается исключение, которое будет обработано блоком catch.

Мы специально создаем файл и открываем его, используя конструктор класса CStdioFile, а не метод Open. Метод Open в случае возникновения ошибки возвращает соответствующее значение, но не вызывает исключение. Поэтому надо было бы специально проверять значение возвращаемое методом Open.

Для записи в файл мы вызываем метод WriteString, передавая ему в качестве параметра строку strTmpOut, которая содержит данные подготовленные для записи. Каждый вызов метода WriteString записывает в файл одну строку, так как в конце strTmpOut мы всегда записываем символ перевода строки.

Чтобы закрыть файл, мы используем метод Close базового класса CFile. В случае успешного завершения на экране отображается сообщение с именем файла fsystem.dat и управление возвращается методу InitInstance.

Если при работе с файлом возникла ошибка, управление передается блоку catch. В нем отображается сообщение об ошибке, а затем управление сразу возвращается методу InitInstance. Невыполненная часть блока try игнорируется.

Листинг 3.1. Файл TestFile.cpp

// Включаемый файл для MFC

#include

//=====================================================

// Главный класс приложения CMFStartApp

//=====================================================

class CMFStartApp : public CWinApp {

public:

 virtual BOOL InitInstance();

 void FileSystemInfo();

};

// Создаем объект приложение класса CMFStartApp

CMFStartApp MFStartApp;

//=====================================================

// Переопределяем виртуальный метод InitInstance

// класса CWinApp

//=====================================================

BOOL CMFStartApp::InitInstance() {

 // Определяем характеристики файловой системы

 FileSystemInfo();

 // Завершаем приложение

 return FALSE;

}

//=====================================================

// Метод FileSystemInfo главного класса приложения

// Определяет характеристики текущего тома и записывает

// их в файл

//=====================================================

void CMFStartApp::FileSystemInfo() {

 // Метка тома

 CString VolumeNameBuffer;

 // Максимальная длина метки тома

 DWORD nVolumeNameSize = 100;

 // Серийный номер тома

 DWORD VolumeSerialNumber;

 // Максимальная длина имени файла

 DWORD MaximumComponentLength;

 // Характеристики файловой системы

 DWORD FileSystemFlags;

 // Тип файловой системы

 CString FileSystemNameBuffer;

 // Максимальная длина строки типа файловой системы

 DWORD nFileSystemNameSize = 100;

 // Получаем данные о файловой системе и текущем устройстве

 GetVolumeInformation(NULL, VolumeNameBuffer.GetBuffer(nVolumeNameSize), nVolumeNameSize, &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer.GetBuffer(nFileSystemNameSize), nFileSystemNameSize);

 // Снимаем блокировку буферов

 VolumeNameBuffer.ReleaseBuffer();

 FileSystemNameBuffer.ReleaseBuffer();

Перейти на страницу:

Все книги серии Библиотека системного программиста

Похожие книги