![]() |
TVirtualStringTree speichern
Hi,
ich versuche derzeit ein VirtualStringTree in eine XML-Datei zu speichern (mir ist bewusst, dass VST eine Funktion SaveToFile mitliefert, aber das ist ziemlich suspekt mit typisierten Dateien). Dazu verwende ich folgende Funktion:
Delphi-Quellcode:
Allerdings gibt es mittendrin eine Access Violation, allerdings ohne Zeilenangabe. Daher kann ich den Fehler nicht finden, denn der Fehler tritt beim zeilenweise durchgehen "zufällig" auf.
procedure TMainForm.SaveToXML(aFileName: string);
var xmlDoc: IXMLDOMDocument2; mainNode, subNode, subsubNode: IXMLDOMNode; curData, curSubData: TData; rootnode, subrootnode: PVirtualNode; i, j: integer; f: TextFile; begin DeleteFile(aFileName); AssignFile(f, aFileName); Rewrite(f); writeln(f, '<?xml version="1.0"?>'); writeln(f, '<projects>'); writeln(f, '</projects>'); CloseFile(f); xmlDoc := CoDOMDocument40.Create(); xmlDoc.load(aFileName); if XMLDoc.parseError.errorCode <> 0 then begin ShowMessage('XML Fehler: ' + #13#10 + XMLDoc.parseError.reason + #13#10 + 'Source: ' + xmldoc.parseError.srcText); xmldoc := nil; end; rootNode := vstProjects.RootNode; for i:=0 to vstProjects.RootNodeCount - 1 do begin curData := PData(vstProjects.GetNodeData(rootNode))^; if not Assigned(@curData) then break; mainNode := xmlDoc.createElement('project'); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('name'); subNode.text := curData.Name; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('prglanguage'); subNode.text := curData.PrgLanguage; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('language'); subNode.text := curData.Language; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('projectdir'); subNode.text := curData.ProjectDir; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('sourcefiles'); subRootNode := rootNode.LastChild; for j:=0 to rootNode.ChildCount - 1 do begin curSubData := PData(vstProjects.GetNodeData(subRootNode))^; xmlDoc.documentElement.appendChild(mainNode); subsubNode := xmlDoc.createElement('name'); subsubNode.text := curSubData.Name; subNode.appendChild(subsubNode); xmlDoc.documentElement.appendChild(mainNode); subsubNode := xmlDoc.createElement('prglanguage'); subsubNode.text := curSubData.PrgLanguage; subNode.appendChild(subsubNode); xmlDoc.documentElement.appendChild(mainNode); subsubNode := xmlDoc.createElement('filename'); subsubNode.text := curSubData.FileName; subNode.appendChild(subsubNode); subRootNode := subRootNode.NextSibling; end; mainNode.appendChild(subNode); xmlDoc.save(aFileName); rootNode := rootNode.NextSibling; end; end; Hat jemand eine Lösung für dieses Problem? Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz