Главная страница
    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.044 c
14-1105101564
Kerk
2005-01-07 15:39
2005.01.23
Полифонические мидяшки


9-1097331098
borrman
2004-10-09 18:11
2005.01.23
Алгоритм поиска слов в игре Балда


1-1105281196
Skiner_Y
2005-01-09 17:33
2005.01.23
TImage наведение


3-1103425616
TechnoDreamer
2004-12-19 06:06
2005.01.23
ADO, Access и пустые таблицы


1-1105377770
Ivan Pashkov
2005-01-10 20:22
2005.01.23
Есть у кого dcc32.exe для Delphi 2005?





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