Главная страница

Диски и файлы (C Builder). Диски и файлы (C++ Builder). Диски и файлы (C Builder)


Скачать 27.97 Kb.
НазваниеДиски и файлы (C Builder)
АнкорДиски и файлы (C Builder
Дата12.09.2022
Размер27.97 Kb.
Формат файлаdocx
Имя файлаДиски и файлы (C++ Builder).docx
ТипДокументы
#673150

Диски и файлы (C++ Builder)

  1. Получение метки диска

  2. Определение размера диска (VCL вариант)

  3. Определение свободного пространства на диске (VCL вариант)

  4. Создание ярлыка

  5. Удаление файла в корзину (VCL вариант)

  6. Удаление файла (Вариант 1)

  7. [+] Удаление файла (Вариант 2)

  8. Работа с файлами GIF и JPEG

  9. Преобразование *.ico файла в *.bmp

  10. Отображение свойств файла

  11. Копирование файлов

  12. Удаление директории

  13. Вpемя создания файла

  14. Поиск файлов в каталоге и его подкаталогах

  15. Как выбрать папку из диалога (Вариант 1)

  16. Как выбрать папку из диалога (Вариант 2)

  17. Как удалить папку и все файлы в ней

  18. Пример регистрации собственного расширения файла

  19. [+] Как узнать, есть ли указанный диск в системе

  20. [+] Как проверить наличие дискеты в дисководе

  1. Получение метки диска

    // Для получения метки диска напишите следующий код:
    char DiskLabel[MAX_PATH];
    char *DiskName = "c:\\"; // имя диска
    GetVolumeInformation(DiskName, DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);
    // в DiskLabel находится метка диска

  2. Определение размера диска (VCL вариант)

    // Для определения размера диска используйте функцию DiskSize, объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий диск. Следующий код определит размер диска С в байтах.
    __int64 Size = DiskSize(3);

  3. Определение свободного пространства на диске (VCL вариант)

    // Для определения свободного пространства на диске используйте функцию DiskFree, объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий диск. Следующий код определит размер свободного пространства на диске С в байтах.
    __int64 FreeSpace = DiskFree(3);

  4. Создание ярлыка

    // для использования функции необходимо подключить файл
    // shlobj.h
    // lpszPathObj - путь к объекту, для которого будет
    // создаваться ярлык
    // lpszPathLink - где будет создаватья ярлык
    // lpszDesc - описание ярлыка
    HRESULT CreateLink(LPCSTR lpszPathObj, LPSTR lpszPathLink, LPSTR lpszDesc)
    {
    HRESULT hres;
    IShellLink *psl;
    CoInitialize(NULL);
    hres = CoCreateInstance(CLSID_ShellLink, NULL,
    CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl);
    if(SUCCEEDED(hres))
    {
    IPersistFile *ppf;
    psl->SetPath(lpszPathObj);
    psl->SetDescription(lpszDesc);
    hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
    if(SUCCEEDED(hres))
    {
    wchar_t wsz[MAX_PATH];
    MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH);
    hres = ppf->Save(wsz, true);
    ppf->Release();
    }
    psl->Release();
    CoUninitialize();
    }
    return hres;
    }

  5. Удаление файла в корзину (VCL вариант)

    // разместите компонент TOpenDialog (OpenDialog1) и TButton (Button1) на форме (Form1). Для удаления файла в корзину напишите следующий код:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if(OpenDialog1->Execute())
    {
    AnsiString DialogTitle = "Удаление в корзину";
    SHFILEOPSTRUCT FileOpStruct;
    ZeroMemory(&FileOpStruct, sizeof(SHFILEOPSTRUCT));
    FileOpStruct.pFrom = (OpenDialog1->FileName + '\0').c_str();
    FileOpStruct.wFunc = FO_DELETE;
    FileOpStruct.fFlags = FOF_ALLOWUNDO;
    FileOpStruct.lpszProgressTitle = DialogTitle.c_str();
    SHFileOperation(&FileOpStruct);
    }
    }

  6. Удаление файла (Вариант 1)

    // Для удаления файла надо подключить к проекту Sysutils.hpp и напишите следующий код:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    AnsiString FileName="c:\\readme.txt";
    if (DeleteFile(FileName)) Label1->Caption="true";
    }

  7. Удаление файла (Вариант 2)

    // Для удаления файла напишите следующий код:
    #include
    String FileName="c:\\1.txt";
    remove(FileName.c_str());

  8. Работа с файлами GIF и JPEG

    // Для того, чтобы стандартными средствами C++Builder'a работать с файлами GIF и JPEG, добавьте в начало программы следующий код:
    TPicture *Picture = new TPicture();
    Picture->RegisterFileFormat(__classid(TJPEGImage), "jpg", "jpg",
    __classid(TJPEGImage));
    delete Picture;

    TPicture *Picture = new TPicture();
    Picture->RegisterFileFormat(__classid(TGIFImage), "gif", "gif",
    __classid(TGIFImage));
    delete Picture;

  9. Преобразование *.ico файла в *.bmp

    // На форме разместите TImage (Image1), TOpenDialog (OpenDialog1) и TButton (Button1). Напишите следующий обработчик события OnClick кнопки:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    AnsiString as;
    TIcon *pi = new TIcon();
    OpenDialog1->DefaultExt = ".ICO";
    OpenDialog1->Filter = "icons (*.ico)|*.ICO";
    OpenDialog1->Options << ofOverwritePrompt << ofFileMustExist << ofHideReadOnly;
    if (OpenDialog1->Execute())
    {
    pi->LoadFromFile(OpenDialog1->FileName);
    as = ChangeFileExt(OpenDialog1->FileName,".BMP");
    Image1->Width = Icon->Width;
    Image1->Height = Icon->Height;
    Image1->Canvas->Draw(0, 0, Icon);
    Image1->Picture->SaveToFile(as);
    }
    delete pi;
    }

  10. Отображение свойств файла

    // На форме разместите 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);
    }
    }

  11. Копирование файлов

    // Для того чтобы скопировать файлы напишите следующий код:
    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 первый параметр что копировать,
    // второй куда копировать
    FAQ с сайта Borland X Portal

  12. Удаление директории

    // Для удаления директории напишите следующий код:
    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);
    }

  13. В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);
    }

  14. Поиск файлов в каталоге и его подкаталогах

    // Для поиска файлов в каталоге и его подкаталогах напишите следующий код:
    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);
    }

  15. Как выбрать папку из диалога (Вариант 1)

    // Для того чтобы выбрать папку из диалога напишите следуюший код:
    #include
    .. .. .. ..
    AnsiString way = "c:\\";
    if(SelectDirectory("Укажите путь к папке","",way))
    Label1->Caption = way;

  16. Как выбрать папку из диалога (Вариант 2)

    // Для того чтобы выбрать папку из диалога напишите следуюший код:
    #include
    .. .. .. ..
    AnsiString way = "c:\\";
    if(SelectDirectory(way,
    TSelectDirOpts() << sdAllowCreate << sdPerformCreate << sdPrompt, 0))
    Label1->Caption = way;

  17. Как удалить папку и все файлы в ней

    // Для того чтобы удалить папку и все файлы в ней напишите следующую функцию:
    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;
    }

  18. Пример регистрации собственного расширения файла

    // Напишите следующую функцию:
    #include

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+" ОШИБКА ЗАГРУЗКИ ФАЙЛА!!!");
}
Автор: ant47

  1. Пример регистрации собственного расширения файла

// Напишите следующуй код:
if(GetDriveType("F:\\") == DRIVE_NO_ROOT_DIR)
MessageBox(NULL, "Указанного диска в системе нет!", "Внимание!", MB_OK | MB_ICONEXCLAMATION);
else
MessageBox(NULL, "Указанный диск есть в системе!", "Внимание!", MB_OK | MB_ICONINFORMATION);

  1. Как проверить наличие дискеты в дисководе

// Напишите следующуй код:
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("Нет дискеты");

Наверх


написать администратору сайта