Простой и быстрый переход по иерархической файловой системе. Наличие файлового менеджера. Ряд глобальных переменных. Основные пользовательские функции. Основная идея формирования дерева. Функция добавления записи в список. Обновление дерева каталогов.
Аннотация к работе
Конструкторская часть 3.1 Дополнительные возможности 3.1.1 Копирование/перемещение перетаскиванием 3.1.2 Работа с дискетами и дисками 3.1.3 Свойства файлов, папок и дисков 4. Экспериментальная часть Вывод Список использованной литературы Введение Ни одна операционная система на сегодняшний день не может обойтись без удобного и надежного файлового менеджера. Не зря все современные операционные системы, как правило, включают в свой состав, в первую очередь, именно файловый менеджер, как неотъемлемую часть самой ОС и необходимый компонент для реализации всех возможностей по доступу к файловой системе. Программа написана в среде Microsoft Visual Studio 2008. 1. Данный компонент должен обеспечить быстрый доступ к отдельным контейнерам (папкам, директориям, дискам) файловой системы, корнем дерева служит виртуальный компонент «Мой компьютер», замыкающий на себе все диски. Перетаскивание может осуществляться как в пределах одного компонента (папки в папку в TreeView, файла в папку в ListView), так и между компонентами. Ряд переменных хранит информацию о состоянии списка файлов и папок ListView1: CurrentDir - название текущего каталога, StyleListView - стиль отображения значков (список, таблица…), ColumnToSort - номер сортируемой колонки, Direct - направление сортировки (прямое, обратное). Вспомогательные функции: void FirstUpOtherDown(char) и void FirstUpOtherDown(AnsiString). Порядок ее осуществления: очистка списка, поиск файлов (папок) в указанном каталоге функциями FindFirst, FindNext, FindClose, добавление соответствующих найденным файлам записей вышеописанной функцией AddItemInListView, сохранение текущего каталога, обновление статусной панели информации. VI. Функция выполнения операций над файлами int FileAndFolderOperation(char *frombuf, char *tobuf, unsigned int operation) и вспомогательная функция формирования строки-списка файлов void PrepareBufForOperationInListView(char * &). Функции обновления дерева, списка, меток: void UpdateTreeView(bool UpdateAllways), void UpdateListView(bool UpdateAllways), void UpdateLabel(), void UpdateAll(bool UpdateAllways) и вспомогательная функция void RecursTree(TTreeNode *node,bool UpdateAllways). Алгоритмы программы #pragma hdrstop #include #include Unit1.h #include #include #include PropertyFile.h #include PropertyDrive.h #include #define CFSTR_PREFERREDDROPEFFECT TEXT(Preferred DropEffect) using namespace std; vector set_drive_num; //Вектор с номерами установленных дисков TTreeNode *head, *tpItem; //Голова и темповая переменная //указатель на верхний отображаемый //узел для отсутствия скачков unsigned int type_file_operation_drag_drop; //Тип операции при drag drop AnsiString CurrentDir=; //Текущий каталог TViewStyle StyleListView=vsReport; Set DiskIn; bool DragnDrop=true; //Флаг разрешения перетаскивания int ColumnToSort=0; //Номер колонки по которой сортируют int Direct=1; //Направление соритировки //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource *.dfm TForm1 *Form1; //--------------------------------------------------------------------------- void FirstUpOtherDown(char *str) //Опускает все буквы кроме первой { if((str[0]>96 && str[0]223 && str[0]64 && str[i]191 && str[i]96 && str[1]223 && str[1]64 && str[i]191 && str[i]>=1; } } void TForm1::ShowDrives() //Отображает диски в дереве { char str[10]; char inf[20]; for(unsigned int i=0;iItems->AddChildObject(head,AnsiString(inf) ( (char)(A set_drive_num[i]) :),p); switch(unsigned int p=GetDriveType(str)) //Загрузка image { case DRIVE_REMOVABLE: temp->SelectedIndex=ImageFloppy; temp->ImageIndex=ImageFloppy; break; case DRIVE_FIXED: case DRIVE_RAMDISK: temp->SelectedIndex=ImageDrive; temp->ImageIndex=ImageDrive; break; case DRIVE_CDROM: temp->SelectedIndex=ImageCD; temp->ImageIndex=ImageCD; break; default: temp->SelectedIndex=ImageWindows; temp->ImageIndex=ImageWindows; break; } } } TTreeNode* TForm1::AddChildInNodeTree(TTreeNode *Node, AnsiString Dir) { AnsiString temp=Dir; AnsiString Name=ExtractFileName(temp.SetLength(temp.Length()-1)); FirstUpOtherDown(Name); AnsiString *p=new AnsiString(Dir); //Добавляем новый потомок к treeview TTreeNode *t=TreeView1->Items->AddChildObject(Node,Name,p); t->ImageIndex=ImageCloseFolder; t->SelectedIndex=ImageOpenFolder; return t; //Возвращаем указатель на него } void TForm1::ViewChild(TTreeNode *Node) //Отображение детей узла в treeview { //Перебор детей открывамого узла TTreeNode *child=Node->getFirstChild(); TSearchRec sr; AnsiString dir,name; do { dir=*((AnsiString *)child->Data); //Проверка диска на гибкую дискету и вообще отсутствие детей if((((GetDriveType(dir.c_str())==DRIVE_REMOVABLE) || (GetDriveType(dir.c_str())==DRIVE_CDROM)) && !DiskIn.Contains(ExtractFileDrive(dir)[1])) || FindFirst(dir *,faAnyFile,sr)!=0) //Просмотр папок в детях continue; //Гибкую дискету нельзя отображать