Страница 5 из 17
Отображение свойств файла
// На форме разместите TOpenDialog (OpenDialog1) и TButton // (Button1) напишите следующий обработчик события OnClick кнопки: void __fastcall TForm1::Button1Click(TObject *Sender) { if(OpenDialog1->Execute()) { SHELLEXECUTEINFO SEI; ZeroMemory(&SEI, sizeof(SHELLEXECUTEINFO)); SEI.cbSize= sizeof(SHELLEXECUTEINFO); SEI.lpVerb = "properties"; SEI.lpFile= OpenDialog1->FileName.c_str(); SEI.nShow = SW_SHOW; SEI.fMask= SEE_MASK_INVOKEIDLIST; ShellExecuteEx(&SEI); } }
Копирование файлов
// Для того чтобы скопировать файлы напишите следующий код: int MoveFiles( AnsiString slSourceDir, AnsiString slTargetDir, bool toCopy = true ) { SHFILEOPSTRUCT sh; sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_FILESONLY; sh.wFunc = toCopy ? FO_COPY : FO_MOVE; sh.pFrom = slSourceDir.c_str(); sh.pTo = slTargetDir.c_str(); sh.hNameMappings = NULL; sh.lpszProgressTitle = NULL; return SHFileOperation ( &sh ); }
void __fastcall TForm1::Button1Click(TObject *Sender) { //copy all from program files if(!MoveFiles("c:\\program files\\*.*", "c:\\temp")) ShowMessage("Ok"); else ShowMessage("No"); } // В функции MoveFiles первый параметр что копировать, // второй куда копировать Удаление директории
// Для удаления директории напишите следующий код: void __fastcall TForm1::Button1Click(TObject *Sender) { SHFILEOPSTRUCT sh; sh.hwnd=Form1->Handle; sh.wFunc = FO_DELETE; sh.pFrom = "c:\\test\0"; //удаляемая директория sh.pTo = NULL; sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT; sh.hNameMappings = 0; sh.lpszProgressTitle = NULL; SHFileOperation(&sh); }
Вpемя создания файла
// На форме должны быть Lаbel1 и Button1, затем напишите следующий код: TDateTime FileTimeToDateTime(FILETIME *lpftime) { FILETIME localfiletime; SYSTEMTIME systime; FileTimeToLocalFileTime(lpftime,&localfiletime); FileTimeToSystemTime(&localfiletime,&systime); return(TDateTime(systime.wYear, systime.wMonth, systime.wDay)+ TDateTime(systime.wHour, systime.wMinute, systime.wSecond, systime.wMilliseconds)); } //---------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { FILETIME ftCreationTime,ftLastAccessTime,ftLastWriteTime; HANDLE hFile=(HANDLE)FileOpen("c:\\autoexec.bat",fmOpenRead); GetFileTime(hFile,&ftCreationTime,&ftLastAccessTime,&ftLastWriteTime); AnsiString FileInfo="FileName: c:\\autoexec.bat"; FileInfo+="\nCreation Time:"+ FormatDateTime("c",FileTimeToDateTime(&ftCreationTime)); FileInfo+="\nLast Access Time:"+ FormatDateTime("c",FileTimeToDateTime(&ftLastAccessTime)); FileInfo+="\nLast Write Time:"+ FormatDateTime("c",FileTimeToDateTime(&ftLastWriteTime)); Label1->Caption=FileInfo; FileClose((int) hFile); }
Поиск файлов в каталоге и его подкаталогах
// Для поиска файлов в каталоге и его подкаталогах напишите следующий код: void ListFiles(AnsiString path, TStrings* List) { // Эта процедура выводит список файлов и вызывает // саму себя для всех каталогов TSearchRec sr; if (FindFirst(path+"*.*", faAnyFile, sr) == 0) { do { if (sr.Attr & faDirectory) { if (sr.Name!=".") if (sr.Name!="..") { ListFiles(path+sr.Name+"\\",List);// Рекурсивный вызов } } else { AnsiString Ext=ExtractFileExt(sr.Name).UpperCase(); if (Ext==".CPP") List->Add(path+sr.Name); } } while (FindNext(sr) == 0); FindClose(sr); } Application->ProcessMessages(); }
void __fastcall TForm1::Button1Click(TObject *Sender) { ListFiles("c:\\",Memo1->Lines); }
Как выбрать папку из диалога (Вариант 1)
// Для того чтобы выбрать папку из диалога напишите следуюший код: #include <FileCtrl.hpp> .. .. .. .. AnsiString way = "c:\\"; if(SelectDirectory("Укажите путь к папке","",way)) Label1->Caption = way;
Как выбрать папку из диалога (Вариант 2)
// Для того чтобы выбрать папку из диалога напишите следуюший код: #include <FileCtrl.hpp> .. .. .. .. AnsiString way = "c:\\"; if(SelectDirectory(way, TSelectDirOpts() << sdAllowCreate << sdPerformCreate << sdPrompt, 0)) Label1->Caption = way; Как удалить папку и все файлы в ней
// Для того чтобы удалить папку и все файлы в ней напишите следующую функцию: bool DeleteDir(AnsiString DirName) { TSearchRec sr; if (DirName.Length()) { if (!FindFirst(DirName+"\\*.*",faAnyFile,sr)) do { if (!(sr.Name=="." || sr.Name==".."))// это удалять не надо if (((sr.Attr & faDirectory) == faDirectory ) || (sr.Attr == faDirectory))// найдена папка { FileSetAttr(DirName+"\\"+sr.Name, faDirectory );// сброс всяких read-only DeleteDir(DirName+"\\"+sr.Name);//рекурсивно удаляем содержимое RemoveDir(DirName + "\\"+sr.Name);// удаляем теперь уже пустую папку } else// иначе найден файл { FileSetAttr(DirName+"\\"+sr.Name, 0);// сброс всяких read-only DeleteFile(DirName+"\\"+sr.Name);// удаляем файл } } while (!FindNext(sr));// ищем опять, пока не найдем все FindClose(sr); } RemoveDir(DirName); return true; }
Пример регистрации собственного расширения файла
// Напишите следующую функцию: #include <Registry.hpp> TRegistry *Reg; Reg=NULL; try { Reg=new TRegistry; Reg->RootKey=HKEY_CLASSES_ROOT; Reg->OpenKey("\\.ant",true); Reg->WriteString("","MyProgram"); Reg->CloseKey(); Reg->OpenKey("\\MyProgram", true); Reg->WriteString("","My document"); Reg->CloseKey(); Reg->OpenKey("\\MyProgram\\Shell\\Open\\Command",true); Reg->WriteString("",ParamStr(0)+" \"%1\""); Reg->CloseKey(); Reg->OpenKey("\\MyProgram\\DefaultIcon",true); Reg->WriteString("",ParamStr(0)+", 1"); Reg->CloseKey(); } __finally { if (Reg!=NULL)delete Reg; } // Весь текст генерирует расширение *.ant // А этот код загружает файл с расширением *.ant в Image1. if (ParamCount>0) { asFileName=ParamStr(1); if (FileExists(asFileName)) Image1->Picture->LoadFromFile(asFileName); else ShowMessage(asFileName+" ОШИБКА ЗАГРУЗКИ ФАЙЛА!!!"); } Пример регистрации собственного расширения файла // Напишите следующуй код: if(GetDriveType("F:\\") == DRIVE_NO_ROOT_DIR) MessageBox(NULL, "Указанного диска в системе нет!", "Внимание!", MB_OK | MB_ICONEXCLAMATION); else MessageBox(NULL, "Указанный диск есть в системе!", "Внимание!", MB_OK | MB_ICONINFORMATION); Как проверить наличие дискеты в дисководе // Напишите следующуй код: bool IsDriveReady(char drive) { bool out; WORD OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); char path[4];path[0] = drive;path[1] = ':';path[2] = '\\';path[3] = 0; out = (SetCurrentDirectory(path) != 0); SetErrorMode(OldErrorMode); return out; } if (IsDriveReady('a')) ShowMessage("Дискета в дисководе"); else ShowMessage("Нет дискеты"); |