Диски и файлы
// Для получения метки диска напишите следующий код:
char DiskLabel[MAX_PATH];
char *DiskName = "c:\\"; // имя диска
GetVolumeInformation(DiskName, DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);
// в DiskLabel находится метка диска
// Для определения размера диска используйте функцию DiskSize, объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий диск. Следующий код определит размер диска С в байтах.
__int64 Size = DiskSize(3);
// Для определения свободного пространства на диске используйте функцию DiskFree, объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий диск. Следующий код определит размер свободного пространства на диске С в байтах.
__int64 FreeSpace = DiskFree(3);
// для использования функции необходимо подключить файл
// 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;
}
// разместите компонент 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);
}
}
// Для удаления файла надо подключить к проекту Sysutils.hpp и напишите следующий код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString FileName="c:\\readme.txt";
if (DeleteFile(FileName)) Label1->Caption="true";
}
// Для удаления файла напишите следующий код:
#include <stdio.h>
String FileName="c:\\1.txt";
remove(FileName.c_str());
// Для того, чтобы стандартными средствами 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;
// На форме разместите 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
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;
}
// На форме разместите 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 первый параметр что копировать,
// второй куда копировать
FAQ с сайта
// Для удаления директории напишите следующий код:
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);
}
// На форме должны быть 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);
}
// Для того чтобы выбрать папку из диалога напишите следуюший код:
#include <FileCtrl.hpp>
.. .. .. ..
AnsiString way = "c:\\";
if(SelectDirectory("Укажите путь к папке","",way))
Label1->Caption = way;
// Для того чтобы выбрать папку из диалога напишите следуюший код:
#include <FileCtrl.hpp>
.. .. .. ..
AnsiString way = "c:\\";
if(SelectDirectory(way,
TSelectDirOpts()
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("Нет дискеты");