Курсовая работа: Файловый менеджер
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