Jak odczytać sektor z dysku

0

Witam wszystkich zainteresowanych, Mam pytanie jak odczytać kolejny sektor z dysku do tablicy????

Mam problemos,
Z góry dziękuję za odpowieź i pomoc<<<<<<<<<<<<<<<<<<<

0

Poczytaj o CreateFile. Jako nazwę pliku podajesz '\.\X:' gdzie X to nazwa partycji, lub '\.\PHYSICALDRIVEx' gdzie x to numer dysku twardego. Dostęp do sektorów masz wtedy taki sam jak do pliku otwartego poleceniem CreateFile.

0

Powyższa metoda działa na systemach opartych na NT, na systemach 9x i ME musisz użyć innej techniki np. użyć wirtualnego sterownika na przerywanie 13h. Może to ci pomoże.

0

Pod Windami z rodziny NT najlepiej pobrać Handle dysku przez CreateFile, a poem do strumienia.
Tutaj masz przykładzik:

function GetDiskHandle(Letter: Char; bWrite: boolean):THandle;
var DOSTEP : cardinal;
begin
  // GENERIC_WRITE daje dostęp tylko do zapisu, aby mieć odczyt i zapis użyj GENERIC_ALL
  If bWrite then
    DOSTEP := GENERIC_WRITE
  else
    DOSTEP := GENERIC_READ;

  Result := CreateFile(PChar('\\.\'+Letter+':'), DOSTEP,
            FILE_SHARE_WRITE or FILE_SHARE_READ or FILE_SHARE_DELETE,
            nil, OPEN_EXISTING, 0, 0 );
  if result = INVALID_HANDLE_VALUE then
     result := 0;
end;

procedure ReadFromDisk;
var
  Drv : THandleStream;
  Fil : TFileStream;
begin
  Drv := THandleStream.Create(GetDiskHandle('C',false));
  Fil := TFileStream.Create('D:\obraz.txt', fmCreate);
  // w tym momencie możesz normalnie korzystać ze strumieni, użyć funkcji Seek itp.
  // np. funkcja poniżej kopiuje pierwsze 1024 bajty z partycji C.
  Fil.CopyFrom(Drv, 1024);
  Drv.Free;
  Fil.Free;
end;

Poczytaj w helpie na temat CreateFile, jest to funkcja WinApi.
Uważaj z zapiswaniem sektorów na dysk, jest to bardzo niebezpieczne, na początek lepiej poczwiczyć z dyskietką ;)

// dop.
tu masz funkcję zapisująca na daną partycję zawartość wybranego pliku:

procedure WriteToDisk;
var
  Drv : THandleStream;
  Fil : TFileStream;
begin
  Drv := THandleStream.Create(GetDiskHandle('A',true));  // pobiera handle z możliwoscią zapisu
  Fil := TFileStream.Create('D:\obraz.txt', fmOpenRead);
  Drv.CopyFrom(Fil, 0);  // dla drugiego parametru = 0 kopiuje zawartość całego pliku
  Drv.Free;
  Fil.Free;
end;
0

Dzieki wszystkim za pomoc, teraz powinienem sobie poradzić @@@@@@

Pozdrawiam Paulus
:) :) :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1