Диски и файлы

  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 <stdio.h>
    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 <FileCtrl.hpp>
    .. .. .. ..
    AnsiString way = "c:\\";
    if(SelectDirectory("Укажите путь к папке","",way))
      Label1->Caption = way;

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

    // Для того чтобы выбрать папку из диалога напишите следуюший код:
    #include <FileCtrl.hpp>
    .. .. .. ..
    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 <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+" ОШИБКА ЗАГРУЗКИ ФАЙЛА!!!");
    }
    Автор:
    ant47

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

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

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

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

Наверх
Hosted by uCoz