 |
[DELPHI] Запись динамического массива в файл |

07.05.2010, 08:17
|
|
Участник форума
Регистрация: 14.03.2009
Сообщений: 237
С нами:
9031410
Репутация:
314
|
|
[DELPHI] Запись динамического массива в файл
Новый вопрос:
var
nulldata:array of byte;
i:integer;
begin
SetLength(nulldata, sizedata);
for i:=1 to sizedata
do nulldata[i]:=$0;
...
WriteFile(hFile,nulldata,sizeOf(nulldata),bytesrea d,nil);
CloseHandle(hFile);
...
При записи, в файл пишутся не данные из динамического массива, а его адрес =((
Как это исправить?
Последний раз редактировалось s0l_ir0n; 07.05.2010 в 13:03..
|
|
|

07.05.2010, 09:21
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
p или pb пусть у тебя будет pchar и работай потом норм с ним как со строкой.
А тут ты говоришь что pb - это указатель на слово (которое 2 байта). Вот он и выводит по 2 байта.
|
|
|

07.05.2010, 13:07
|
|
Участник форума
Регистрация: 14.03.2009
Сообщений: 237
С нами:
9031410
Репутация:
314
|
|
Ап. Вопрос изменил.
|
|
|

07.05.2010, 13:10
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
можно так
WriteFile(hFile,@nulldata[0],sizeOf(nulldata),bytesread,nil);
или так попробуй
WriteFile(hFile,nulldata^,sizeOf(nulldata),bytesre ad,nil);
Делфи может орать на несоответствие типов, там подбереш нужные
|
|
|

07.05.2010, 13:15
|
|
Участник форума
Регистрация: 14.03.2009
Сообщений: 237
С нами:
9031410
Репутация:
314
|
|
Компилятор орет, пропускает только
WriteFile(hFile,nulldata,sizeOf(nulldata),bytesrea d,nil);
и
WriteFile(hFile,PChar(nulldata)^,sizeOf(nulldata), bytesread,nil);
но в обоих случаях записывается адрес, а не данные((((
|
|
|

07.05.2010, 14:35
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
попробуй тогда тк
WriteFile(hFile, nulldata[0], sizeOf(nulldata),bytesread,nil);
|
|
|

07.05.2010, 15:23
|
|
Познающий
Регистрация: 21.06.2009
Сообщений: 81
С нами:
8888963
Репутация:
5
|
|
По моему Sizeof в данном случае вернет размер указателя, т.е. 4 байта. Чтобы узнать длину нужно юзать ф-цию Length, не зря ведь память выделяется ф-цией SetLENGTH..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|