Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Размер диска при низкоуровневом чтении...


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 26
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеЧт, 24-Июл-2008 14:33    Заголовок сообщения: Размер диска при низкоуровневом чтении...
Цитата

Жители форума у меня вот такой возник вопрос как можно узнать размер сектора диска при чтении через CreateFile

А то хочется сделать счётчик который бы по процентам показывал чтение из файла, а API функции возвращают только INVALID_FILE_SIZE... Я пробывал через GetFileSize, SetFilePointer - на последний сектор всёравно результат неправелный...

delphi:
  1. program driveimg;
  2. {$APPTYPE CONSOLE}
  3.  
  4. uses
  5.   SysUtils,
  6.   Windows;
  7.  
  8. var
  9.  hFDrive : HFILE;
  10.  hImgFile: HFILE;
  11. // pBuffer : array[1..(1024 * 64)] of Byte; // 64kb buffer
  12.  pBuffer : array[1..(1024 * 1024)] of Byte; // 1mb buffer
  13.  iBuffRe : DWORD;
  14.  iBuffWr : DWORD;
  15.  sEx     : string;
  16.  
  17. begin
  18.  hFDrive := CreateFile('\\.\D:', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
  19.  if ( hFDrive <> INVALID_HANDLE_VALUE ) then
  20.  begin
  21.  
  22.   hImgFile := CreateFile('disk.iso', GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, 0, 0);
  23.   if ( hImgFile <> INVALID_HANDLE_VALUE ) then
  24.  
  25.   begin
  26.    iBuffRe := 1;
  27.  
  28.    while (
  29.            (ReadFile(hFDrive, pBuffer, SizeOf(pBuffer), iBuffRe, nil) = True) and
  30.            (iBuffRe <> $0000)
  31.          ) do
  32.    begin
  33.     WriteFile(hImgFile, pBuffer, iBuffRe, iBuffWr, nil);
  34.     if ( iBuffRe <> iBuffWr ) then
  35.     begin
  36.      WriteLn('Error while writening image');
  37.      Break;
  38.     end;
  39.     Write(#4);
  40.    end;
  41.  
  42.    WriteLn(#13#10#13#10'Write image OK');
  43.  
  44.    CloseHandle(hImgFile);
  45.   end else
  46.    WriteLn('Image to output dissalowed.');
  47.   CloseHandle(hFDrive);
  48.  end else
  49.   WriteLn('No disk in drive...');
  50.  
  51.  ReadLn(sEx);
  52. end.

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100