Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
ВнизRead Disk Найти похожие ветки
← →
Cj © (2007-06-28 17:40) [0]Подскажите как можно по быстрее считать диск, а то ReadFile уж больно медленная.
← →
Джо © (2007-06-28 17:41) [1]> а то ReadFile уж больно медленная.
Аргументы?
← →
Johnmen © (2007-06-28 17:44) [2]А что потом делать с диском? Со считанным?
← →
Германн © (2007-06-28 17:49) [3]
> Johnmen © (28.06.07 17:44) [2]
>
> А что потом делать с диском? Со считанным?
>
После прочтения съесть.
← →
Игорь Шевченко © (2007-06-28 17:51) [4]
> а то ReadFile уж больно медленная.
Другого нет. Читай большими кусками
← →
homm © (2007-06-28 17:55) [5]> а то ReadFile уж больно медленная.
А может не она медленная, а используешь ты ее криво? Код давай.
← →
Johnmen © (2007-06-28 17:58) [6]Для считывания диска надо применять ReadDisk, а ReadFile здесь непричём...
← →
Cj © (2007-06-28 17:58) [7]Но BlockRead тоже обращается к диску, а работает намного быстрей, и WinHex быстро считывает
← →
Anatoly Podgoretsky © (2007-06-28 18:48) [8]> Cj (28.06.2007 17:58:07) [7]
BlockRead обращается к файлу
А что такое диск?
← →
Cj © (2007-06-28 19:22) [9]читает она файл, но фаил-же на диске
← →
oldman © (2007-06-28 19:26) [10]
> Cj © (28.06.07 19:22) [9]
> читает она файл, но фаил-же на диске
Ну и что? Тему развивай...
← →
Cj © (2007-06-28 19:31) [11]ну так вот она читает файл с диска быстре чем ReadFile читает диск. Короче, как ускорить чтение диска?
← →
Anatoly Podgoretsky © (2007-06-28 19:37) [12]> Cj (28.06.2007 19:31:11) [11]
ReadFile не читает диск.
Попробуй еще развить тему, поднапрягись.
← →
Cj © (2007-06-28 19:47) [13]читает.: CreateFile, ReadFile
← →
Anatoly Podgoretsky © (2007-06-28 19:48) [14]> Cj (28.06.2007 19:47:13) [13]
Это чтение файла.
← →
Cj © (2007-06-28 19:58) [15]CreateFile("\\.\C:\", итд. вот и будет диск открыт
← →
begin...end © (2007-06-28 19:59) [16]> Cj © (28.06.07 17:58) [7]
Открою секрет: процедура BlockRead для чтения файла использует функцию ReadFile.
← →
Cj © (2007-06-28 20:09) [17]а чё же тогда ReadFile читает медленнее, раз Blockread через неё выходит на файл
← →
Правильный Вася (2007-06-28 20:12) [18]не надо читать по одному байту (так, как ты сейчас в час по чайной ложке выдавливаешь из своего тюбика инфу для нас)
← →
begin...end © (2007-06-28 20:27) [19]> Cj © (28.06.07 20:09) [17]
См. [5].
← →
просто_ник © (2007-06-29 01:20) [20]а у вас есть функция чтобы считать cd-rom, очень нужно
← →
Германн © (2007-06-29 02:00) [21]
> просто_ник © (29.06.07 01:20) [20]
>
> а у вас есть функция чтобы считать cd-rom, очень нужно
>
Есть конечно. У нас всё есть. ReadFile, например.
← →
Джо © (2007-06-29 02:19) [22]> [21] Германн © (29.06.07 02:00)
> Есть конечно. У нас всё есть. ReadFile, например.
А я могу дать BlockRead. По неподтвержденным слухам, она работает быстрее :-D
← →
Германн © (2007-06-29 02:46) [23]
> Джо © (29.06.07 02:19) [22]
>
> > [21] Германн © (29.06.07 02:00)
> > Есть конечно. У нас всё есть. ReadFile, например.
>
> А я могу дать BlockRead. По неподтвержденным слухам, она
> работает быстрее :-D
>
Ну так у тебя штаны особые :)
← →
Cj © (2007-06-29 04:44) [24]
> 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;
что неправильно?
← →
Cj © (2007-06-29 04:45) [25]
> a:array[1..BootSize]of byte;
BootSize - это 1024
← →
Cj © (2007-06-29 04:46) [26]вот правильней
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;
← →
ЮЮ © (2007-06-29 05:32) [27]> s:=s+inttohex(a[count],2);
1024*1024 раз перераспределять память - не может быть быстро.
> //считать один метр
непосредственно из файла считтывается только один раз 1024 байта - до цикла. В цикле только дерганье памяти. где считывание?
> a:array[1..1024]of byte
a[count], где count 1...1024*1024
за границы массива не страшно вылазить? :)
И после всего этого, виновата ReadFile
← →
SlymRO © (2007-06-29 05:54) [28]а так?
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 06:02) [29]> [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 06:31) [30]ЮЮ © (29.06.07 6:02) [29]
писал в блокноте... не проверял естесно...
← →
homm © (2007-06-29 07:22) [31]> [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;
← →
Dimaxx © (2007-06-29 16:12) [32]
>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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.041 c