RSS    

   Курсовая работа: Файловый менеджер

 else

 {

 strcpy(inf,"");

 }

 FirstUpOtherDown(inf);

 AnsiString *p=new AnsiString(str);

 temp=TreeView1->Items->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

 

 do

 while((child=Node->GetNextChild(child))!=NULL);

 }

void TForm1::DeleteChild(TTreeNode *Node) //Удаление потомков потомков узла (их уже не видно)

 {

 TTreeNode *child=Node->getFirstChild();

 TTreeNode *childchild;

 do

 while((childchild=child->getFirstChild())!=NULL)

 {

 delete childchild->Data;

 TreeView1->Items->Delete(childchild);

 }

 while((child=Node->GetNextChild(child))!=NULL);

 }

bool CheckExpandedChild(TTreeNode *Node) //Проверка раскрытия ветви хотя бы одного

 

 do

int TForm1::FileAndFolderOperation(char *frombuf, char *tobuf, unsigned int operation)

 { //Осуществление операций над файлами - копирование, перемещение

 //удаление, переименование

 SHFILEOPSTRUCT OpStruc;

 OpStruc.hwnd= Handle;

 OpStruc.wFunc= operation;

 OpStruc.pFrom= frombuf;

 OpStruc.pTo=tobuf;

 OpStruc.fFlags=0;

 OpStruc.fAnyOperationsAborted= false;

 OpStruc.hNameMappings= NULL;

 OpStruc.lpszProgressTitle= NULL;

 int p=SHFileOperation(&OpStruc);

 return p;

 }

TListItem *TForm1::AddItemInListView(TSearchRec sr,AnsiString dir)

 { //Добавление записи в listview из sr и каталога dir

 TListItem *p;

 AnsiString date;

 int size=sr.Size/1024;

 p=ListView1->Items->Add(); //Добавление нового элемента

 FirstUpOtherDown(sr.Name); //Выравнивание у имени символов

 DateTimeToString(date,"dd/mm/yy h:nn",FileDateToDateTime(sr.Time));

 AnsiString *a;

 if(sr.Attr & faDirectory)

 {

 a=new AnsiString(dir+sr.Name+"\\"); //Сохранение полного имени для доступа

 p->SubItems->Add(""); //Для директорий (папок)

 p->SubItems->Add("Папка");

 p->ImageIndex=ImageCloseFolder;

 }

 else

 

 icon->Handle=sfi.hIcon;

 p->SubItems->Add(date); //4 Добавление даты

 p->Data=a;

 p->Caption=sr.Name; //1 Запись названия

 return p;

 }

void TForm1::ViewFailAndFolderInListView(AnsiString dir)

 { //Отображение в listview папки указанной dir

 for(int i=0;i<ListView1->Items->Count;i++)

 delete ListView1->Items->Item[i]->Data; //Очистка данных о полном пути к файлам

 ImageList2->Clear();

 ImageList4->Clear();

 ListView1->Clear(); //Очистка списка

 ImageList2->AddImages(ImageList1);

 ImageList4->AddImages(ImageList3);

 AnsiString path=dir.SubString(1,3); //Извлечение названия корневого каталога

 char inf[20];

 unsigned int p=GetDriveType(path.c_str());

 if(p==DRIVE_REMOVABLE || p==DRIVE_CDROM)

 {

 if(GetVolumeInformation(path.c_str(),inf,20,NULL,NULL,NULL,NULL,NULL))

 {

 if(!(DiskIn.Contains(path[1]))) DiskIn<<path[1];

 UpdateTreeView(false);

 UpdateLabel();

 }

 else

 {

 UpdateTreeView(false);

 if(DiskIn.Contains(path[1])) DiskIn>>path[1];

 UpdateLabel();

 CurrentDir="";

 return;

 }

 }

 while(ExtractFileDrive(dir).AnsiCompareIC(dir)!=0 && GetFileAttributes(dir.c_str())==-1)

 dir=ExtractFilePath(dir.SetLength(dir.Length()-1));

 TSearchRec sr;

 if(FindFirst(dir+"*",faAnyFile,sr)!=0) //Просмотр папок в детях

 return;

 do

 

 while(FindNext(sr)==0);

 FindClose(sr);

 CurrentDir=dir; //Запоминание текущего каталога

 double c=10.0;

 __int64 FreeSpace,TotalSpace;

 if(Sysutils::GetDiskFreeSpaceEx(ExtractFileDrive(dir).c_str(),NULL,TotalSpace,&FreeSpace))

 StatusBar1->SimpleText=AnsiString("Объектов: ")+ListView1->Items->Count+" (Свободно на диске "+ AnsiString(((FreeSpace*10)/1024/1024/1024)/c)+" ГБ)";

 

 }

void TForm1::ViewProperty() //Отображение свойств файла папки диска

 {

 if(CurrentDir=="") return;

 if(ListView1->ItemFocused==NULL)

 {

 if(TreeView1->Selected!=NULL)

 {

 if(TreeView1->Selected->Level==1)

 FPropertyDrive->Prepare(*((AnsiString *)(TreeView1->Selected->Data)));

 else if(TreeView1->Selected->Level>1)

 FPropertyFile->Prepare(*((AnsiString *)(TreeView1->Selected->Data)));

 }

 }

 else

 {

 if(ListView1->Selected!=NULL)

 FPropertyFile->Prepare(*((AnsiString *)(ListView1->Selected->Data)));

 else

 {

 if(ExtractFileDrive(CurrentDir).AnsiCompareIC(CurrentDir.SubString(1,CurrentDir.Length()-1))==0)

 FPropertyDrive->Prepare(CurrentDir);

 else

 FPropertyFile->Prepare(CurrentDir);

 }

 }

 UpdateAll(true);

 }

void TForm1::PrepareBufForOperationInListView(char * &frombuf) //Подготовка буфера данных

 { //над которыми производится опер

 frombuf=new char[ListView1->SelCount*MAX_PATH+1];

 if(ListView1->SelCount==1) //Если выделен один элемент то все просто

 { //заполняем frombuf именем

 AnsiString sourcestr=*((AnsiString *)(ListView1->Selected->Data));

 if((FileGetAttr(sourcestr) & faDirectory)!=0)

 sourcestr.SetLength(sourcestr.Length()-1);

 strcpy(frombuf,sourcestr.c_str());

 finstr(frombuf);

 }

 else

 {

 char *temp=frombuf;

 bool flag=false; //Если несколько последовательно заполняем именами

 for(int i=0;i<ListView1->Items->Count;i++)

 if(ListView1->Items->Item[i]->Selected)

 {

 AnsiString sourcestr=*((AnsiString *)(ListView1->Items->Item[i]->Data));

 if((FileGetAttr(sourcestr) & faDirectory)!=0)

 sourcestr.SetLength(sourcestr.Length()-1);

 if(flag)

 strcat0(temp,sourcestr.c_str());

 else

 {

 strcpy(temp,sourcestr.c_str());

 flag=true;

 }

 }

 finstr(temp);

 }

 }

AnsiString TForm1::RenameFileOrFolder(AnsiString NewName)

 {

 char frombuf[MAX_PATH+1]={'\0'},tobuf[MAX_PATH+1]={'\0'};

 if(ListView1->ItemFocused==NULL)

 {

 if(TreeView1->Selected!=NULL)

 if(TreeView1->Selected->Level>1)

 {

 AnsiString temp;

 AnsiString *sourcestr=((AnsiString *)(TreeView1->Selected->Data));

 temp=*sourcestr; //Сохранение в темповой переменной старого пути

 sourcestr->SetLength(sourcestr->Length()-1);

 strcpy(frombuf,sourcestr->c_str()); //Построение нового пути

 *sourcestr=ExtractFilePath(*sourcestr)+NewName;

 strcpy(tobuf,sourcestr->c_str());

 if(FileAndFolderOperation(frombuf,tobuf,FO_RENAME)!=0) //Если операция не удалась

 {

 *sourcestr=temp; //Возвращаем назад

 NewName=ExtractFileName(temp.SubString(1,temp.Length()));

 }

 else

 *sourcestr=*sourcestr+"\\"; //Если нормально меняем путь

 return NewName;

 }

 }

 else

 if((ListView1->Selected)!=NULL)

 {

 bool dir=false;

 AnsiString *sourcestr=((AnsiString *)(ListView1->Selected->Data));

 AnsiString temp=*sourcestr;

 if((FileGetAttr(*sourcestr) & faDirectory)!=0)

 {

 sourcestr->SetLength(sourcestr->Length()-1);

 dir=true;

 }

 strcpy(frombuf,sourcestr->c_str());

 *sourcestr=ExtractFilePath(*sourcestr)+NewName;

 strcpy(tobuf,sourcestr->c_str());

 if(FileAndFolderOperation(frombuf,tobuf,FO_RENAME)!=0)

 {

 *sourcestr=temp;

 if(dir)

 temp.SetLength(temp.Length()-1);

 NewName=ExtractFileName(temp);

 }

 else

 if(dir)

 *sourcestr=*sourcestr+"\\";

 return NewName;

 }

 }

void TForm1::DeleteFileOrFolder()

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.