以下是俺由陈宽达的<<Delphi深度历险>>的随书代码中 递归用文件实现TTreeView的save和load的算法
改编过来的.并在Delphi 7测试通过.请各位过目.
type
 TNodeInfo=record
    text:string;
    Deep:integer;//节点深度,从1开始
 end;
procedure mLoadTreeviewProcess(treeNodes:TTreeNodes;fileName:string);
//使用方法:在form的oncreate中加入:mLoadTreeviewProces(ttreeView1.items,'c:\NodesData.dat')
var
  Node,NewNode:TTreeNode;
  deep:Integer;
  NewNodeInfo:TNodeInfo;
  s:string;
  F: TextFile;
begin
  Node:=nil;
  deep:=1;
  Assignfile(F, fileName);
  reset(F);
  treeNodes.Clear;  while not eof(F) do
  begin
    //getNodeInfo(NewNodeInfo);
    Read(F,S);
    NewNodeInfo.text:=Copy(S,1,Pos(' ',S)-1);
    NewNodeInfo.Deep:=StrToInt(copy(S,Pos(' ',S)+1,Length(S)-Pos(' ',S)));
    if NewNodeInfo.deep>deep then
    begin
      newNode:=treeNodes.addchild(Node,NewNodeInfo.text);      deep:=deep+1;
      Node:=newNode;
      Readln(F,s);//moveNext;
    end else if NewNodeInfo.deep=deep then
    begin
      newNode:=treenodes.add(Node,NewNodeInfo.text);
      Node:=NewNode;
      Readln(F,s);
    end else
    begin
      repeat
        Node:=Node.Parent;
        deep:=deep-1;
      until deep=NewNodeInfo.Deep;
      newNode:=treenodes.add(Node,NewNodeInfo.text);
      Node:=NewNode;
      Readln(F,s);
    end;
  end;  CloseFile(F);
end;procedure mSaveTreeviewProcess(treeNodes:TTreeNodes;fileName:string);
//使用方法:在form的onclose中加入:mSaveTreeviewProcess(ttreeView1.items,'c:\NodesData.dat')
var
  tNode,Node:TTreeNode;
  deep:integer;
  F: TextFile;
  newNodeInfo:TNodeInfo;
  s:string;
begin
  if treeNodes.Count=0 then exit;
  Node:=treeNodes.GetFirstNode;
  deep:=1;
  Assignfile(F, fileName);
  rewrite(F);  //创建一个新文件  while Node<> nil do
  begin
    newNodeInfo.text:=Node.Text;
    newNodeInfo.Deep:=deep;
   // WriteNodeInfo(newNodeInfo);
    s:=Trim(newNodeInfo.text)+' '+IntToStr(newNodeInfo.Deep);
    Writeln(F,s);//写操作    if Node.HasChildren then
    begin
      Node:=Node.getFirstChild;
      deep:=deep+1;
    end else
    begin
      tNode:=Node;
      Node:=tNode.getNextSibling;
      while (Node=nil) and (deep>1) do
      begin
        tNode:=tNode.parent;
        Node:=tNode.getNextSibling;
        deep:=deep-1;
      end;
    end;
  end;
  CloseFile(F);
end;