![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Read Disk [D7, XP]
Cj © (2007-06-28 17:40:00)Подскажите как можно по быстрее считать диск, а то ReadFile уж больно медленная.
Dimaxx (2007-06-29 16:12:00) [1]
>count:=1;
>for h:=1 to data.RowCount-1 do
>begin
> count:=count+1;
> s:=s+inttohex(a[count],2);
>end;
Лучче брось это дело, раз пишешь такие вот "орехи". Не проще было:
for h:=1 to data.RowCount-1 do
begin
s:=s+inttohex(a[h+1],2);
end;
homm (2007-06-29 07:22:00) [2]> [26] Cj © (29.06.07 04:46)
Ну а теперь вот так попробуй, и скажи долго ли работает ReadFile.
var
f:cardinal;
a:array[1..1024]of byte;
r:cardinal;
s:string;
count:cardinal;
begin
f:=createfile (pchar('\\.\'+edit1.Text+':'),
GENERIC_READ,FILE_SHARE_READ,
nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
CloseHandle(f);
end;
SlymRO (2007-06-29 06:31:00) [3]ЮЮ © (29.06.07 6:02) [29]
писал в блокноте... не проверял естесно...
ЮЮ (2007-06-29 06:02:00) [4]> [28] SlymRO © (29.06.07 05:54)
Лучше. Но
1) не грех воспользоваться r, ибо могли считать и меньше
SetLength(s, 2 * r);
for h := 0 to r do
2) s[h*2] === 0 на первом шаге итерации
s[2 * h + 1]
SlymRO (2007-06-29 05:54:00) [5]а так?
f:cardinal;
a:array[0..BootSize-1]of byte;
r:cardinal;
s,ss:string;
count:cardinal;
begin
f:=createfile (pchar('\\.\'+edit1.Text+':'),
GENERIC_READ,FILE_SHARE_READ,
nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
CloseHandle(f);
SetLength(s,sizeof(a)*2);
for h:=Low(a) to High(a) do
begin
ss:=inttohex(a[h],2);
move(ss[1],s[h*2],2);
end;
end;
ЮЮ (2007-06-29 05:32:00) [6]> s:=s+inttohex(a[count],2);
1024*1024 раз перераспределять память - не может быть быстро.
> //считать один метр
непосредственно из файла считтывается только один раз 1024 байта - до цикла. В цикле только дерганье памяти. где считывание?
> a:array[1..1024]of byte
a[count], где count 1...1024*1024
за границы массива не страшно вылазить? :)
И после всего этого, виновата ReadFile
Cj (2007-06-29 04:46:00) [7]вот правильней
var
f:cardinal;
a:array[1..1024]of byte;
r:cardinal;
s:string;
count:cardinal;
begin
f:=createfile (pchar('\\.\'+edit1.Text+':'),
GENERIC_READ,FILE_SHARE_READ,
nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
count:=1;
for h:=1 to 1024*1024 do //считать один метр
begin
count:=count+1;
s:=s+inttohex(a[count],2);
end;
CloseHandle(f);
end;
Cj (2007-06-29 04:45:00) [8]
> a:array[1..BootSize]of byte;
BootSize - это 1024
Cj (2007-06-29 04:44:00) [9]
> begin...end © (28.06.07 20:27) [19]
> > Cj © (28.06.07 20:09) [17]См. [5].
вот:
var
f:cardinal;
a:array[1..BootSize]of byte;
r:cardinal;
s:string;
count:cardinal;
begin
f:=createfile (pchar('\\.\'+edit1.Text+':'),
GENERIC_READ,FILE_SHARE_READ,
nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
count:=1;
for h:=1 to data.RowCount-1 do
begin
count:=count+1;
s:=s+inttohex(a[count],2);
end;
CloseHandle(f);
end;
что неправильно?
Германн (2007-06-29 02:46:00) [10]
> Джо © (29.06.07 02:19) [22]
>
> > [21] Германн © (29.06.07 02:00)
> > Есть конечно. У нас всё есть. ReadFile, например.
>
> А я могу дать BlockRead. По неподтвержденным слухам, она
> работает быстрее :-D
>
Ну так у тебя штаны особые :)
Джо (2007-06-29 02:19:00) [11]> [21] Германн © (29.06.07 02:00)
> Есть конечно. У нас всё есть. ReadFile, например.
А я могу дать BlockRead. По неподтвержденным слухам, она работает быстрее :-D
Германн (2007-06-29 02:00:00) [12]
> просто_ник © (29.06.07 01:20) [20]
>
> а у вас есть функция чтобы считать cd-rom, очень нужно
>
Есть конечно. У нас всё есть. ReadFile, например.
просто_ник (2007-06-29 01:20:00) [13]а у вас есть функция чтобы считать cd-rom, очень нужно
begin...end (2007-06-28 20:27:00) [14]> Cj © (28.06.07 20:09) [17]
См. [5].
Правильный Вася (2007-06-28 20:12:00) [15]не надо читать по одному байту (так, как ты сейчас в час по чайной ложке выдавливаешь из своего тюбика инфу для нас)
Cj (2007-06-28 20:09:00) [16]а чё же тогда ReadFile читает медленнее, раз Blockread через неё выходит на файл
begin...end (2007-06-28 19:59:00) [17]> Cj © (28.06.07 17:58) [7]
Открою секрет: процедура BlockRead для чтения файла использует функцию ReadFile.
Cj (2007-06-28 19:58:00) [18]CreateFile('\\.\C:\', итд. вот и будет диск открыт
Anatoly Podgoretsky (2007-06-28 19:48:00) [19]> Cj (28.06.2007 19:47:13) [13]
Это чтение файла.
Cj (2007-06-28 19:47:00) [20]читает.: CreateFile, ReadFile