我正在按照本教程來保存和加載我的VirtualStringTree:http://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus 我現在的問題是,當我保存和加載時,我的數據已損壞。字符已更改並添加。那麼有誰知道問題是什麼?保存和加載後損壞的數據VirtualStringTree
2
A
回答
2
我發現這個Link並改變了awnser以適合我的代碼。
Data.Symbol[1] //Simply points to a char. So I changed it to 'char'
閱讀:
Stream.Read(Len, SizeOf(Len));
SetLength(Data.Column0, Len);
Stream.Read(PChar(Data.Column0)^, Len * SizeOf(Char));
//Copy/Paste this code for all Columns
寫:
Len := Length(Data.Column0);
Stream.Write(Len, SizeOf(Len));
Stream.Write(PChar(Data.Column0)^, Length(Data.Column0) * SizeOf(Char));
//Copy/Paste this code for all Columns
第二個答案由TLama:
閱讀:
var
TreeData: PTreeData;
BinaryReader: TBinaryReader;
begin
TreeData := Sender.GetNodeData(Node);
BinaryReader := TBinaryReader.Create(Stream);
try
TreeData.Column0 := BinaryReader.ReadString;
TreeData.Column1 := BinaryReader.ReadString;
TreeData.Column2 := BinaryReader.ReadString;
finally
BinaryReader.Free;
end;
end;
寫:
var
TreeData: PTreeData;
BinaryWriter: TBinaryWriter;
begin
TreeData := Sender.GetNodeData(Node);
BinaryWriter := TBinaryWriter.Create(Stream);
try
BinaryWriter.Write(TreeData.Column0);
BinaryWriter.Write(TreeData.Column1);
BinaryWriter.Write(TreeData.Column2);
finally
BinaryWriter.Free;
end;
end;
我實現TLama的答案,因爲我真的不能與所有的指針困擾。這段代碼看起來好多了,讀起來容易多了,佔用的空間也少,而且也一樣。
所以得出結論。當你在網上搜索保存你的VST數據時,你會得到很多垃圾代碼。第一個答案會爲你解決這個問題。第二個會讓你微笑:)
相關問題
- 1. numpy保存/加載損壞數組
- 2. PySpark - 加載和保存文件路徑,一些損壞
- 3. 推入載體後內存已損壞
- 4. Django:加載後數據已損壞? (可能程序員錯誤)
- 5. 加載與exif和/或損壞的元數據JPEG圖像
- 6. 保存文件已損壞
- 7. wget保存標題和文件損壞?
- 8. 數據包損壞和UDP
- 9. 下載後文件損壞
- 10. 下載後文件損壞
- 11. Windows損壞後,損壞的Linux安裝
- 12. App Engine批量加載器下載數據損壞文件
- 13. 停電後的sqlite存儲中的核心數據損壞
- 14. 使用NSData保存PNG圖像writetofile保存iphone磁盤上的損壞數據
- 15. 下載錯誤....存檔文件損壞或損壞
- 16. wkHTMLtoPDF內存損壞和AccessViolationException
- 17. Buffered Writer在創建新文件時加載損壞的數據
- 18. 內存損壞
- 19. ManagedObjectContext保存導致NSManagedObject數據損壞/失效
- 20. memcpy中的數據損壞
- 21. iphone nslog損壞的數據
- 22. ClassLoader - 加載和保存數據
- 23. 在UItableview中保存和加載數據
- 24. 保存和加載數據(iphone sdk)
- 25. 保存/加載IOS數據
- 26. 確保下載數據的HTTP機制在下載過程中沒有損壞?
- 27. Android - 保存文件時損壞
- 28. 下載XLSX損壞
- 29. WCF Web服務和數據損壞
- 30. 使用MediumText和ASP/MySQL數據損壞
你需要讀寫比Lazarus的例子多的字節。更具體地說,你必須寫'(Data.Column,Len * SizeOf(Char));'和Read(Data.Column,Len * SizeOf(Char));'因爲你的字符串是每個字符2字節Delphi版本。儘管如此,我會離開這個例子,或者爲字符串寫入和讀取做輔助函數,或者使用現成的'TBinaryWriter'。 – TLama
你幾乎在那裏。你確實給了我信息來尋找正確的代碼。 Tnx – Eszee