:: MVP ::
|
|
:: RSS ::
|
|
|
Как узнать количество секторов в кластере на указанном диске?
function GetSectorsPerCluster( Disk: char ): Cardinal;
var
SectorsPerCluster: Cardinal; // Количество секторов в кластере
BytesPerSector: Cardinal; // Количество байт в секторе
NumberOfFreeClusters: Cardinal; // Количество свободных кластеров
TotalNumberClusters: Cardinal; // Общее количество кластеров
begin
GetDiskFreeSpace( PChar( Disk + ':\' ),
SectorsPerCluster, BytesPerSector,
NumberOfFreeClusters, TotalNumberClusters );
Result := SectorsPerCluster;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( IntToStr( GetSectorsPerCluster( 'c' ) ) );
end;
|
Как узнать количество байт в секторе на указанном диске?
function GetBytesPerSector( Disk: char ): Cardinal;
var
SectorsPerCluster: Cardinal; // Количество секторов в кластере
BytesPerSector: Cardinal; // Количество байт в секторе
NumberOfFreeClusters: Cardinal; // Количество свободных кластеров
TotalNumberClusters: Cardinal; // Общее количество кластеров
begin
GetDiskFreeSpace( PChar( Disk + ':\' ),
SectorsPerCluster, BytesPerSector,
NumberOfFreeClusters, TotalNumberClusters );
Result := BytesPerSector;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( IntToStr( GetBytesPerSector( 'c' ) ) );
end;
|
Как отформатировать диск?
uses
{...,} ShellAPI;
function SHFormatDrive( hWnd: HWND; Drive: Word; fmtID: Word;
Options: Word ): Longint; stdcall;
external 'Shell32.dll' name 'SHFormatDrive';
procedure TForm1.FormatDrive(Drive: char);
const
SHFMT_ID_DEFAULT = $FFFF;
// Быстрое (очистка оглавления диска)
SHFMT_OPT_QUICKFORMAT = 0;
// Полное
SHFMT_OPT_FULLFORMAT = 1;
// Только копирование системных файлов
SHFMT_OPT_SYSONLY = 2;
SHFMT_ERROR = -1;
SHFMT_CANCEL = -2;
SHFMT_NOFORMAT = -3;
var
FmtRes: longint;
FmtDrive: word;
begin
FmtDrive := Ord( UpCase( Drive ) ) - 65;
try
FmtRes:= ShFormatDrive( Handle,
FmtDrive,
SHFMT_ID_DEFAULT,
SHFMT_OPT_QUICKFORMAT );
case FmtRes of
SHFMT_ERROR: ShowMessage( 'Error formatting the drive' );
SHFMT_CANCEL: ShowMessage( 'User canceled formatting the drive' );
SHFMT_NOFORMAT: ShowMessage( 'No Format' )
else
ShowMessage( 'Disk has been formatted' );
end;
except
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FormatDrive( 'A' );
end;
|
Как узнать номер PhysicalDrive по букве раздела диска?
function GetDeviceNumberByLetter( ALetter: Char ): Integer;
const
IOCTL_STORAGE_GET_DEVICE_NUMBER = $2D1080;
type
TDeviceInfo = packed record
DeviceType,
DeviceNumber,
PartitionNumber: DWORD;
end;
var
hDevice: THandle;
BytesReturned: DWORD;
DeviceInfo: TDeviceInfo;
begin
Result := -1;
hDevice := CreateFile( PChar( '\\.\' + ALetter + ':' ), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
Win32Check( hDevice <> INVALID_HANDLE_VALUE );
try
Win32Check( DeviceIoControl( hDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER, nil, 0,
@DeviceInfo, SizeOf( TDeviceInfo ), BytesReturned, nil ) );
Result := DeviceInfo.DeviceNumber;
finally
CloseHandle( hDevice );
end;
end;
|
При использовании материала - ссылка на сайт обязательна
|
|