Задание: Вычислить расположение и начальный кластер заданного каталога на диске. Прочитать содержимое каталога по всем его кластерам в память.
Мысль такая) В DriveComboBox выбираем диск, в DirectoryListBox каталог. Далее необходимо найти первый кластер каталога, сколько он занимает кластеров и передать в эту процедуру:
procedure TForm1.Button3Click(Sender: TObject);
var hDevice: THandle;
mbr: TSectorBuffer;
Buffer1: String;
i,j:Byte;
k:Integer;
begin
Memo1.Clear;
hDevice:=CreateFile(PChar('\\.\'+DriveComboBox1.Drive+':'), GENERIC_READ, FILE_SHARE_READ
or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hDevice = INVALID_HANDLE_VALUE then
begin Memo1.Lines.Add('Invalid handle name'); Exit; end;
for k:=SpinEdit1.Value to SpinEdit1.Value+SpinEdit2.Value-1 do
begin
if not ReadSector(hDevice, k, mbr) then
begin Memo1.Lines.Add('Error number '+IntToStr(GetLastError)+'for sec: '+IntToStr(k)); end
else
begin
Memo1.Lines.Add('Sector: '+IntToStr(k));
Buffer1:='';
for i:=1 to 32 do
begin
for j:=1 to 16 do
begin
Buffer1:=Buffer1+IntToHex(mbr[16*(i-1)+j], 2)+' ';
end;
Memo1.Lines.Add(Buffer1);
Buffer1:='';
end;
end;
end;
CloseHandle(hDevice);
end;
function TForm1.ReadSector(h: THandle; sec: Int64; var buf: TSectorBuffer): Boolean;
var i:DWORD;
begin
SetFilePointer(h, sec*512, 0, FILE_BEGIN);
Result := ReadFile(h, buf, SizeOf(buf), i, POverlapped(0));
end;
вместо SpinEdit'ов. Вопрос как?) Не смог найти апи функцию которая это делает((