2013-07-13 266 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

您提供了非真實的代碼,但我懷疑「here」是字符串。 要寫入字符串的身體流,可以使用下面的代碼:

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

附:如果您稍後要從流(文件)讀取此字符串,那麼在字符串主體之前寫明其長度是明智的。

+1

對於編寫字符串,最好使用「TStreamWriter」類。特別是在D2009 +上,因爲它具有TEncoding意識。 –