Смекни!
smekni.com

Файловый менеджер (стр. 7 из 7)

TPoint &MousePos, bool &Handled)

{

TTreeNode *node;

if((node=TreeView1->GetNodeAt(MousePos.x,MousePos.y))!=NULL)

{

ListView1->ItemFocused=NULL;

TreeView1->Selected=node;

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

ViewFailAndFolderInListView(*((AnsiString *)(TreeView1->Selected->Data)));

node->Focused=true;

}

else

TreeView1->Selected=NULL;

if(TreeView1->Selected!=NULL && TreeView1->Selected->Level>0)

Handled=false;

else

Handled=true;

PNOpen->Visible=false;

PNView->Visible=false;

PNSort->Visible=false;

PNUpdate->Visible=false;

PNProperty->Visible=true;

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

{

PNCut->Visible=true;

PNCopy->Visible=true;

PNDelete->Visible=true;

PNRename->Visible=true;

}

else

{

PNCut->Visible=false;

PNCopy->Visible=false;

PNDelete->Visible=false;

PNRename->Visible=false;

}

OpenClipboard(NULL); //Проверкавозможностивставки

if(IsClipboardFormatAvailable(CF_HDROP))

PNPaste->Enabled=true;

else

PNPaste->Enabled=false;

CloseClipboard();

}

//-----------------------------------------------------------

1.3. Листинг PropertyFile.cpp

TFPropertyFile *FPropertyFile;

//---------------------------------------------------------------------------

__fastcall TFPropertyFile::TFPropertyFile(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void TFPropertyFile::Set_Change(AnsiString Name,WIN32_FILE_ATTRIBUTE_DATA &attr)

{

if (ENameFile->Modified) //Сохранение изменений

{ //Если изменнео имя файла папки

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

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

char frombuf[1000]={'\0'}, tobuf[1000]={'\0'};

strcpy(frombuf,Name.c_str());

strcpy(tobuf,(ExtractFilePath(Name)+ENameFile->Text).c_str());

Form1->FileAndFolderOperation(frombuf,tobuf,FO_RENAME); //Переименовываем

}

//Сохранениеатрибутов

if(CBArchiv->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_ARCHIVE;

else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_ARCHIVE;

if(CBReadOnly->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_READONLY;

else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY;

if(CBHide->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;

else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN;

if(CBSystem->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_SYSTEM;

else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_SYSTEM;

SetFileAttributes(Name.c_str(),attr.dwFileAttributes); //Установка

ENameFile->Modified=false;

}

void TFPropertyFile::Get_Size_Folder(AnsiString dir)

{

TSearchRec sr;

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

return;

do

{

int Attr=FileGetAttr(dir+sr.Name);

if(Attr==-1 || sr.Name=="." || sr.Name=="..")

continue; //Проверка на отсутствующие в действиетельности папки

if(sr.Attr & faDirectory)

{

num_folder++;

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

}

else

{

num_files++;

size+=sr.Size;

unsigned long temp;

temp=sr.Size;

if((temp/byte_in_cluster*byte_in_cluster)!=temp) //Проверкавлезанияфайла

temp=(temp/byte_in_cluster+1)*byte_in_cluster;

size_on_disk+=temp;

}

}

while(FindNext(sr)==0);

FindClose(sr);

}

void TFPropertyFile::Prepare(AnsiString Name)

{

//Подготовка данных и показ свойств файла

unsigned long int byte_in_sector,sector_in_cluster;

GetDiskFreeSpace((ExtractFileDrive(Name)+"\").c_str(),&sector_in_cluster,

&byte_in_sector,NULL,NULL);

byte_in_cluster=sector_in_cluster*byte_in_sector;

Name_File=Name;

GetFileAttributesEx(Name.c_str(),GetFileExInfoStandard,&attr);

FILETIME ft;

SYSTEMTIME st;

AnsiString date;

TDateTime dt;

if((FileGetAttr(Name) & faDirectory)!=0) //Еслисвойствапапки

{

Graphics::TBitmap *i=new Graphics::TBitmap; //Загрузкаиконкипапки

Form1->ImageList3->GetBitmap(ImageCloseFolder,i);

IIconFile->Picture->Bitmap->Assign(i);

delete i;

ENameFile->Text=ExtractFileName(Name.SubString(1,Name.Length()-1));

LTypeFile->Caption="Папка"; //Загрузканазвания

LFolder->Caption=ExtractFilePath(Name.SubString(1,Name.Length()-1));

num_files=num_folder=size=size_on_disk=0; //Запускрекурсивнойфункциисчитающей

Get_Size_Folder(Name); //размер папки кол-во файлов и папок в ней

LSize->Caption=AnsiString(FormatFloat("#,##0", size/1024))+" KB ("+AnsiString(FormatFloat("#,##0", size))+ " байт)";

LOnDisk->Caption=AnsiString(FormatFloat("#,##0", size_on_disk/1024))+" KB ("+AnsiString(FormatFloat("#,##0", size_on_disk))+ " байт)";

LName->Caption="Содержит:";

LOpen->Caption=AnsiString("Файлов: ")+num_files+" ; Папок: "+num_folder;

}

else //Если свойства файла

{

SHFILEINFO sfi; //Структура содержащая инфу о файле

ZeroMemory(&sfi,sizeof(sfi)); //Очистка

SHGetFileInfo(Name.c_str(),FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(sfi),

SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME|SHGFI_ICON | SHGFI_LARGEICON ); //Получениеданных

TIcon *icon=new TIcon(); //Создание динамической иконки

icon->Handle=sfi.hIcon; //Загрузка в нее дескриптора нужной иконки

IIconFile->Picture->Icon->Assign(icon); //Занесениедескрипторав imagelist

delete icon;

ENameFile->Text=ExtractFileName(Name);

LTypeFile->Caption=(AnsiString)(sfi.szTypeName);//Занесениеименитипа

LFolder->Caption=ExtractFilePath(Name); //Занесениекаталога

//----------------------------------------------

//Получениеатрибутов - датразмераатрибутов

unsigned long int size=attr.nFileSizeHigh<<16 | attr.nFileSizeLow;

//Выводразмеров

LSize->Caption=AnsiString(size/1024)+" KB ("+AnsiString(size)+ " байт)"; //размера

if((size/byte_in_cluster*byte_in_cluster)!=size) //Проверкавлезанияфайла

size=(size/byte_in_cluster+1)*byte_in_cluster; //в кластеры и наличия свободного места в них

LOnDisk->Caption=AnsiString(size/1024)+" KB ("+AnsiString(size)+ " байт)";

LName->Caption="Открыт :";

//----------------------------------------------------

//Определение дат

//Даты доступа

FileTimeToLocalFileTime(&(attr.ftLastAccessTime), &ft);

FileTimeToSystemTime( &ft, &st);

dt=SystemTimeToDateTime(st);

DateTimeToString(date,"d mmm yyyy г.",dt);

LOpen->Caption=date; //Запись даты доступа

//----------------------------------------

}

//Даты создания

FileTimeToLocalFileTime(&(attr.ftCreationTime), &ft);

FileTimeToSystemTime( &ft, &st);

dt=SystemTimeToDateTime(st);

DateTimeToString(date,"d mmm yyyy г., hh:nn:ss",dt);

LCreate->Caption=date; //Запись даты создания

///Даты изменения

FileTimeToLocalFileTime(&(attr.ftLastWriteTime), &ft);

FileTimeToSystemTime( &ft, &st);

dt=SystemTimeToDateTime(st);

DateTimeToString(date,"d mmm yyyy г., hh:nn:ss",dt);

LWrite->Caption=date; //Запись даты изменения


CBArchiv->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE;

CBReadOnly->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_READONLY;

CBHide->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN;

CBSystem->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM;

ENameFile->Modified=false;

if(FPropertyFile->ShowModal()==mrOk) //Показформы

Set_Change(Name,attr);

}

void __fastcall TFPropertyFile::BtApplyClick(TObject *Sender)

{ //Щелчок на применить

Set_Change(Name_File,attr); //Вызов функции сохранения изменений

}

//---------------------------------------------------------------------------

1.4. Листинг PropertyDrive.cpp

TFPropertyDrive *FPropertyDrive;

//---------------------------------------------------------------------------

__fastcall TFPropertyDrive::TFPropertyDrive(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void TFPropertyDrive::Prepare(AnsiString Name)

{

Name_Drive=Name;

Graphics::TBitmap *i=new Graphics::TBitmap; //Загрузка иконки папки

Caption="Свойства: Диск "+Name.SubString(1,2);

switch(GetDriveType(Name.c_str())) //Загрузка image

{

case DRIVE_REMOVABLE:

LType->Caption="Дисковод";

Form1->ImageList3->GetBitmap(ImageFloppy,i);

break;

case DRIVE_FIXED:

case DRIVE_RAMDISK:

LType->Caption="Жесткий диск";

Form1->ImageList3->GetBitmap(ImageDrive,i);

break;

case DRIVE_CDROM:

LType->Caption="CD-дисковод";

Form1->ImageList3->GetBitmap(ImageCD,i);

break;

default:

LType->Caption="Неизвестный дисковод";

Form1->ImageList3->GetBitmap(ImageWindows,i);

break;

}

IIconDisk->Picture->Bitmap->Assign(i);

delete i;

char volume[20],filesystem[20];

if(GetVolumeInformation(Name.c_str(),volume,20,NULL,NULL,NULL,filesystem,20))

{

ELabelDisk->Text=volume;

LFileSystem->Caption=filesystem;

}

else

{

ELabelDisk->Text="";

LFileSystem->Caption="";

}

__int64 FreeSpace,TotalSpace,TakenSpace;

Chart1->Series[0]->Clear();

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

{

double c=10.0;

TakenSpace=TotalSpace-FreeSpace;

LTaken1->Caption=AnsiString(FormatFloat("#,##0", TakenSpace))+" байт";

LTaken2->Caption=AnsiString(((TakenSpace*10)/1024/1024/1024)/c)+" ГБ";

LFree1->Caption=AnsiString(FormatFloat("#,##0", FreeSpace))+" байт";

LFree2->Caption=AnsiString(((FreeSpace*10)/1024/1024/1024)/c)+" ГБ";

LCapacity1->Caption=AnsiString(FormatFloat("#,##0", TotalSpace))+" байт";

LCapacity2->Caption=AnsiString(((TotalSpace*10)/1024/1024/1024)/c)+" ГБ";

Image1->Canvas->Brush->Color=clRed;

Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));

Chart1->Series[0]->Add(TakenSpace,"1",clRed);

Image2->Canvas->Brush->Color=clGreen;

Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height));

Chart1->Series[0]->Add(FreeSpace,"2",clGreen);

Chart1->View3DOptions->Elevation=290;

}

else

{

LTaken1->Caption="0 байт";

LTaken2->Caption="0 байт";

LFree1->Caption="0 байт";

LFree2->Caption="0 байт";

LCapacity1->Caption="0 байт";

LCapacity2->Caption="0 байт";

Image1->Canvas->Brush->Color=clRed;

Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));

Chart1->Series[0]->Add(100,"1",clRed);

Image2->Canvas->Brush->Color=clGreen;

Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height));

Chart1->View3DOptions->Elevation=290;

}

ELabelDisk->Modified=false;

if(FPropertyDrive->ShowModal()==mrOk)

{

if(ELabelDisk->Modified)

SetVolumeLabel(Name.c_str(),ELabelDisk->Text.c_str());

}

}


void __fastcall TFPropertyDrive::BtApplyClick(TObject *Sender)

{

if(ELabelDisk->Modified)

SetVolumeLabel(Name_Drive.c_str(),ELabelDisk->Text.c_str());

ELabelDisk->Modified=false;

}

//---------------------------------------------------------------------------


Список использованной литературы

1. А.Я. Архангельский. Программирование в C++ Builder 6. – М.: ЗАО «Издательство БИНОМ», 2003 г. – 1152 с.

2. А.Я. Архангельский. Справочное пособие. Книга 2. Классы и компоненты. – М.: Бином-Пресс, 2002 г. –528 с.

3. http://rsdn.ru/

4. http://www.sources.ru/

5. http://msdn.microsoft.com/