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

Вниз

Динамический массив и чтение из файла...   Найти похожие ветки 

 
nicesc   (2005-01-12 15:50) [0]

Проблема при попытке прочитать данные из файла, в динмаически объявленный массив, возвращает 0, а если задать жестко - работает.
Причем я пробовал и с ф-ией BlockRead()
Вот последний вариант:
procedure TForm1.Button1Click(Sender: TObject);
var
 tFile  : THandle;
 asmArr : array of byte; - если объявить как array[1..128]всё ок
 len    : integer;
 numStr : cardinal;
 str    : string;
begin
 len:=10;
 SetLength(asmArr,len);
tFile:=CreateFileA("c:\1WORK\test.txt",GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 ReadFile(tFile,asmArr,SizeOf(asmArr),numStr,0);
str:=str+IntToStr(asmArr[1])+IntToStr(asmArr[2]));
 ShowMessage(str);
 CloseHandle(tFile);
 asmArr:=nil;
end;


 
Ega23 ©   (2005-01-12 15:53) [1]

a c:\1WORK\test.txt существует?


 
begin...end ©   (2005-01-12 15:55) [2]

> nicesc   (12.01.05 15:50)

> ReadFile(tFile,asmArr,SizeOf(asmArr),numStr,0);

ReadFile(tFile, asmArr[0], len * SizeOf(Byte), numStr, 0)


 
nicesc   (2005-01-12 21:54) [3]

begin...end/B>
Да точно! Зработало! Спасибо огромное, вы мне очень помогли

А попробовал с BlockRead, так правильно:
AssignFile(disFile,edtPath.Text);
Reset(disFile,1);  <<< тут 1 обязательно!
Seek(disFile,iStr);
BlockRead(disfile,asmArr[0],len*SizeOf(byte),reslt);//,reslt);


 
Johnmen ©   (2005-01-12 22:04) [4]

>begin...end ©  (12.01.05 15:55) [2]

Хм... А это SizeOf(Byte) к чему ?
:)


 
Anatoly Podgoretsky ©   (2005-01-12 22:19) [5]

Ну равно 1


 
Johnmen ©   (2005-01-12 22:35) [6]

Понятно... Более красивая запись единицы...
:)


 
begin...end ©   (2005-01-12 22:40) [7]

> [3] nicesc   (12.01.05 21:54)

> так правильно
> ...
> BlockRead(disfile,asmArr[0],len*SizeOf(byte),reslt);

Это вопрос? :-) Если asmArr - это динамический массив, и Вы установили нужную его длину перед чтением, то, в общем-то, правильно.

Просто дело в том, что между переменной-статическим массивом и переменной-динамическим массивом есть существенное различие. Динамический массив представляет собой фактически указатель на начало данных, поэтому в процедурах типа BlockRead нужно в качестве переменной-буфера указывать первый (а точнее - нулевой) элемент динамического массива. Если же передать саму переменную динамического массива, то данные будут читаться в область памяти, где расположен указатель, а не сами элементы массива. Соответственно, размер переменной динамического массива равен 4 байтам (потому что это указатель), поэтому в BlockRead или ReadFile нужно передавать размер элемента массива, умноженный на их количество.

> [4] Johnmen ©   (12.01.05 22:04)

Это на случай, если byte - это его собственный тип :-)


 
Johnmen ©   (2005-01-12 22:51) [8]

>begin...end ©  (12.01.05 22:40) [7]

Красиво выкрутился...:)


 
Anatoly Podgoretsky ©   (2005-01-12 23:01) [9]

Да ничего не скажешь, умеет.



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

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

Наверх





Память: 0.46 MB
Время: 0.039 c
1-1105552181
debuger
2005-01-12 20:49
2005.01.23
флешка: как ее есть?


3-1103522844
Layner
2004-12-20 09:07
2005.01.23
Господа, посоветуйте по EhLib, как в нем сделать


10-1082046038
white dove
2004-04-15 20:20
2005.01.23
подключение клиента на Delphi к AutoCAD


4-1102363223
z_man
2004-12-06 23:00
2005.01.23
Как поместить программу в автозагрузку?


3-1103390675
cyborg
2004-12-18 20:24
2005.01.23
Вставка данных с использованием данных других полей





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский