Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Работа с HDD   Найти похожие ветки 

 
Tsa   (2006-02-07 14:04) [0]

Добрый день подскажите пожалуйста как в Делфи можно работать с жеским диском на нихком уровне, "бегать" по секторам и т.п.


 
Fay ©   (2006-02-07 14:12) [1]

CreateFile не катит?


 
ZeroDivide ©   (2006-02-07 14:39) [2]

Приведенный ниже кусок кода написан для CD-ROM"а и под Windows NT:

var
   hCDROM: THandle;               // file handle to entire CD-ROM
   IoBuffer: Pointer;             // page-aligned buffer

const
 cd_name = "\\.\r:";

 // get a page-aligned buffer, required for direct IO operations
 IoBuffer := VirtualAlloc (nil, sector_size, MEM_COMMIT, PAGE_READWRITE);
 // connect to the CD-ROM directly, note the file name used....
 hCDROM := CreateFile (cd_name, GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, 0, 0);
 if hCDROM = INVALID_HANDLE_VALUE then
   begin
   er := GetLastError;
   Raise Exception.Create (
     "Failed to connect to CD-ROM drive, error " + IntToStr (er));
   end;

Having connected, reading a sector:

function TForm1.read_sector (sect: integer;  var buf: cd_sector): boolean;
var
 byte_pos: integer;      // restricted to 2GB CDs by 32-bit byte address
 bytes_read: integer;    // number of bytes read from the CD
 OK: Boolean;            // result of the read
begin
 Result := False;                   // assume failure
 byte_pos := sector_size * sect;    // compute byte position on the CD
 // try to do a SEEK into the CD, if that works, do the actual read
 if SetFilePointer (hCDROM, byte_pos, nil, FILE_BEGIN) = byte_pos then
   begin
   // read a sector of data into our page-aligned buffer
   OK := ReadFile (hCDROM, IoBuffer^, sector_size, bytes_read, nil);
   // copy the sector of data to the caller"s buffer
   if OK then Move (IoBuffer^, buf, SizeOf (cd_sector));
   Result := OK;                    // return the result of the read
   end;
end;


 
ZeroDivide ©   (2006-02-07 14:41) [3]

Собственно для HDD так же, просто это я к тому, чтобы hCDROM не смущал.


 
Tsa   (2006-02-07 15:11) [4]

Спасибо !
а записать данные каким образом можно ?


 
Fay ©   (2006-02-07 15:11) [5]

WriteFile


 
Tsa   (2006-02-07 15:20) [6]

WriteFile запишет такимже образом по секторам


 
Fay ©   (2006-02-07 15:23) [7]

Это вопрос? Можно переписать его в недвусмысленную форму?


 
Tsa   (2006-02-07 15:25) [8]

Да вопрос забыл на брать ?


 
Fay ©   (2006-02-07 15:35) [9]

сдаюсь.
язык, вроде, знакомый, но не понятно ничего.


 
Tsa   (2006-02-07 15:53) [10]

:-) WriteFile запишет такимже образом необходимые денные (байты) по секторам,



Страницы: 1 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
15-1139334353
Loginov Dmitry
2006-02-07 20:45
2006.02.26
GroupBox + XPManifest + DLL = ...


2-1139564369
max1000
2006-02-10 12:39
2006.02.26
Пытаюсь создать не стандартную TPanel c Caption в левом верхнем


11-1120737346
rOOse
2005-07-07 15:55
2006.02.26
TreeView


4-1134133839
Beta
2005-12-09 16:10
2006.02.26
Опредление системы


15-1139218284
Хинт
2006-02-06 12:31
2006.02.26
Индексация в Yandex (robots)