Главная страница
    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.041 c
1-1104913176
Sanich
2005-01-05 11:19
2005.01.23
Как сделать чтоб в TDBGridEh выбиралось значние для TDBGridEh


14-1104780262
Zacho
2005-01-03 22:24
2005.01.23
Мистика, ужасы и т.п.


1-1105502786
TankMan
2005-01-12 07:06
2005.01.23
Писал кто-нибудь видеопроигрыватель?


14-1104441096
ArMellon
2004-12-31 00:11
2005.01.23
Если человек выпивает больше четырех раз в год - он хронический


1-1105018226
-[ HAWK ]-
2005-01-06 16:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский