Иллюстрированный самоучитель по Visual Studio.Net


Обращаемся к операционной системе - часть 6


Они, возможно, знакомы вам со времен использования команд DOS.

В библиотеке MFC имеется класс CFileFind, который умеет обнаруживать в папке любые объекты файловой системы. Если объекту такого класса, который обнаружил объект «точка», задать вопрос isDirectory (), то он ответит утвердительно. Тот же ответ будет получен и на другой вопрос isDots (). Другим объектам файловой системы, настоящим папкам и файлам, соответствуют другие ответы на эти же вопросы. Папки отвечают на первый вопрос утвердительно, а на второй отрицательно. Простым файлам нет смысла задавать второй вопрос, так как они отвечают отрицательно на первый. Для них актуален другой вопрос isHidden (), на который утвердительно отвечают файлы с Windows-атрибутом hidden. Его можно использовать для управления показом файлов. В случае если папка содержит только такие файлы, то мы будем считать, что она пуста. Если в папке есть и другие, то в их числе могут быть и mgn-файлы наших документов. В этом случае мы будем считать, что папка не пуста. С учетом сказанного строим алгоритм и функцию проверки файлового адреса:

bool CLeftView::NotErapty(CString s)

{

//====== Параметр s содержит текущий файловый путь

//====== Объект класса, умеющего искать нечто в папке

CFileFind cff;

//====== Дополняем путь маской *.* или \*.*

s += s.Right(l) == '\\' ? "*.*" : "\\*.*";

BOOL bFound = cff.FindFile(s);

//====== Цикл поиска настоящих объектов

while (bFound)

{

bFound = cff.FindNextFile(); //====== Это папка?

if (cff . IsDirectory () && ! cf f. IsDots () )

return true; //====== Это файл?

if (!cff.IsDirectory() SS !cff.IsHidden())

return true;

}

//====== He найдены объекты, достойные внимания

return false;

}

Отметьте, что цикл while не будет продолжительным, так как выход из него происходит при обнаружении первой же настоящей папки или файла. Запустите приложение, устраните возможные ошибки и убедитесь в том, что дерево с изображениями дисков действительно появляется в левом окне.При раскрытии узлов дерева, соответствующих «не пустым» дискам, появляется только одно изображение, которое определяется нулевым индексом системного списка (рис. 5.2). Вы помните, что в «непустые» узлы мы вставляли нулевые элементы. Рекомендуем с

Рис. 5.2. Вид расщепленного окна с файловым деревом

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




Начало  Назад  Вперед