2013-07-13 2 views
-1

Я делаю программу в delphi, которая записывает данные в двоичный файл, и у меня есть проблема, я не понимаю, как ее решить.Запись в двоичных файлах в Delphi

У меня есть следующий код:

testar: = TFileStream.Create ('test.exe', fmOpenWrite); 
testar.Position: = testar.Size; 

here: = '{test} test {test}'; 

testar.Write (here, 1024); 

Испытано с WinHex

http://img836.imageshack.us/img836/3206/la49.jpg

Это издание мелкие принты в двоичном коде, потому что, когда я вижу его с WinHex выглядит хорошо, но это другое код:

testar: = TFileStream.Create ('test.exe', fmOpenWrite); 
testar.Position: = testar.Size; 

here: = '{test}' + Edit1.Text + '{test}'; 

testar.Write (here, 1024); 

Это не показывает вообще-то, потому что кажется, что есть проблема с редактированием, когда вы хотите отредактировать двоичный код, это странно, потому что когда я использую его, все идет одинарные кавычки, но с примером редактирования не работает.

Примечание: Программа не дает никаких сообщений об ошибках

Кто-то может помочь мне с этой проблемой?

+0

Где и как определяется 'testar'? Кроме того, у вас есть много синтаксических ошибок в коде, который вы показываете, я предполагаю, что это ошибки копирования (* eg *, 'test: = ...' должно быть 'test: = ...') – lurker

+2

Никогда не используйте JPG для не- фотографические изображения (например, скриншоты, диаграммы, логотипы, ...). –

+1

Ваш код не имеет смысла. В обоих примерах вы указываете потоку писать 1024 байта данных, но пропускать около 1000 байт слишком мало, а это означает, что он просто будет записывать данные за конец строки; что случайные данные будут такими, какие бывают в памяти до конца строки. Передайте фактическое количество байтов, которые нужно записать в поток. Он не работает с написанием этих байтов и больше подходит для байтов 'Some_Value_Plucked_From_The_Air'. Прочитайте документацию, вместо того, чтобы просто гадать или захватывать дикие ценности из ниоткуда. –

ответ

2

Вы предоставили нереальный код, но я подозреваю, что «здесь» является строкой. Чтобы написать струнный тело в поток, вы можете использовать следующий код:

test.Write(PChar(here)^, SizeOf(Char) * Length(here)); 

P.S. Если вы собираетесь читать эту строку из потока (файла) позже, тогда было бы разумно написать ее длину перед строкой строки.

+1

Для написания строк лучше использовать класс 'TStreamWriter'. Особенно на D2009 +, потому что это TEncoding-aware. –

Смежные вопросы