Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Вниз

Blockread и динамический массив   Найти похожие ветки 

 
Alek Silverstone   (2003-04-25 14:32) [0]

Здрасте всем! Есть следующий код:

reset(f,1);
size:=filesize(f);
closefile(f);
setlength(buf,size);
reset(f,size);
blockread(f,buf,1);
closefile(f);

Синтаксически вроде првильный. НО! после его выполнения массив buf не то что пустой, а имеет нулевую длину! :( Соответственно, любое обращение к нему влечёт EAccessViolation. В чём дело? Юзаю Delphi 6 Update Pack 2, возможности поставить семёрку нет - комп каменного века.


 
icWasya   (2003-04-25 14:35) [1]


reset(f,1);
size:=filesize(f);
closefile(f);
setlength(buf,size);
reset(f,size);
blockread(f,buf [0],1);
closefile(f);



 
Alek Silverstone   (2003-04-25 14:45) [2]

Ты на размер записи в reset посмотри, а потом пиши.


 
Alek Silverstone   (2003-04-25 15:07) [3]

Кстати, вариант

reset(f,1);
size:=filesize(f);
setlength(buf,size);
blockread(f,buf,size);
closefile(f);

возвращает точно такой же результат, т.е. нулевой массив. :(


 
MBo   (2003-04-25 15:31) [4]

Тебе дали абсолютно верный совет, подходяший как для случая динамического массива, так и для статического с нумерацией с нуля. Обдумай его хорошо. Потом сдлай работу над ошибками.


 
Anatoly Podgorestky   (2003-04-25 17:19) [5]

Как думаешь в buf в вызове это @buf или @buf[0], учитывая что параметр объявлен ка ... var Buf; ...


 
Palladin   (2003-04-25 17:26) [6]


> Alek Silverstone © (25.04.03 14:45)

нахал


 
Alek Silverstone   (2003-04-25 20:48) [7]

>icWasya
Прошу прощения, сразу после отправки того сообщения я раскаялся, но как его отредактировать не нашёл. Извиняюсь.

Всем:
Как это сделать по-другому я знаю. НО! мне хотелось бы просто ПОНЯТЬ, почему мои примеры не работают? Я, кстати, нашёл в книге, что этот код не работает в D4 из-за неточностей в Blockread/Write, но что это исправленно в 5 и 6.


 
Palladin   (2003-04-25 20:54) [8]

это все враки, не верь этому, авторы (или переводчики) отнюдь не мастера...
кто то уже жаловался по этому поводу.


 
Palladin   (2003-04-25 20:58) [9]

а не работают потому что
BlockRead BlockWrite
работают не с самой переменной, а с ее адресом
ты передаешь в BlockRead/Write не тот адрес
Buf (дин массив) - это область размером в 4 байта (в Win32) представляющая собой указатель, в эту область ты и предлагаешь записать, но записывать надо не в нее, а туда куда она указывает.
тоесть передавая Buf[Low(Buf)] мы передаем в BlockRead/Write адрес начального элемента в массиве, куда благополучно все пишется.


 
Snap   (2003-04-25 20:59) [10]

Кстати блокреад наскольо я знаю в паскале работал только с записями до 64 кило. В дельфи это ограничение имхо тоже есть. Так что ещё размер надо учесть.


 
Alek Silverstone   (2003-04-25 21:05) [11]

Люди, простите меня!
У меня, наверное, только сейчас голова начала работать... Мне с самого начала дали правильный совет, а я, ввиду своих ограниченных возможностей, его не понял. Простите все!


 
Palladin   (2003-04-25 21:07) [12]


> Snap © (25.04.03 20:59)

в d5 и d6, BlockRead/Write, прекрасно работает с размером и превышающим 64к
в версиях ниже не в курсе


 
Alek Silverstone   (2003-04-25 21:07) [13]

Последнее сообщение я написал ещё не читая объяснения Palladin"а, но всё равно спасибо.



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

Форум: "Основная";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-23075
Alek Silverstone
2003-04-25 14:32
2003.05.08
Blockread и динамический массив


1-23226
Dabadabiabo
2003-04-25 14:17
2003.05.08
Открыть файл стандартным приложением


8-23235
Сергей
2003-01-30 14:00
2003.05.08
Propotional draw


14-23368
blackman
2003-04-17 11:23
2003.05.08
WIN 98 выпадает в осадок ?


6-23272
mixamixa
2003-03-14 07:24
2003.05.08
Определить IP-адрес компьютера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский