Witam wszystkich zainteresowanych, Mam pytanie jak odczytać kolejny sektor z dysku do tablicy????
Mam problemos,
Z góry dziękuję za odpowieź i pomoc<<<<<<<<<<<<<<<<<<<
Witam wszystkich zainteresowanych, Mam pytanie jak odczytać kolejny sektor z dysku do tablicy????
Mam problemos,
Z góry dziękuję za odpowieź i pomoc<<<<<<<<<<<<<<<<<<<
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.
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.
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;
Dzieki wszystkim za pomoc, teraz powinienem sobie poradzić @@@@@@
Pozdrawiam Paulus
:) :) :)