Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ошибка при редактировании файла вручную


Автор: NieL 16.4.2008, 21:16
Как обработать ошибку, в случае если в файл вносятся изменения вручную пользователем.


Код

procedure TNieL_Tree.LLastConf(FileName: String; Ctrl: Tanvil_TreeView);
var
  L: TIntegerList;
  F: TFileStream;
  Cur: TTreeItem;
  i: Integer;
begin
  if FileExists(FileName) then
  begin
    F := TFileStream.Create(FileName, fmOpenRead);
    try
      if F.Size > 0 then
      begin
        L := TIntegerList.Create;
        try
          L.Read(F); { В случае если значение файла не действительное вылетает ошибка }
          Cur := Ctrl.Items[0];
          repeat
            Cur := Cur.Next;
            for i := 0 to L.Count - 1 do
              if Cur.Tag = L[i] then
              begin
                Cur.CheckState := cbChecked;
                if Cur.CheckState <> Cur.Parent.CheckState then
                  ClickItem(Ctrl, Cur);
              end;
          until
            Cur = Ctrl.Items.GetLast;
        finally
          L.Free;
        end;
      end else
        DefaultItemChecked(
          Ctrl, cbChecked);
    finally
      F.Free;
    end;
  end else
    DefaultItemChecked(
      Ctrl, cbChecked); 
end;

Автор: MetalFan 16.4.2008, 22:30
что есть TIntegerList, и что делает его метод Read? и в конце концов, что за ошибка то "вылетает" и как далеко летит?

Автор: NieL 16.4.2008, 22:40
TIntegerList - аналог TStringList, но работае только с Integer-значениями.
Метод Read - Считывает значения Integer хранящиеся в Stream (в свою очередь получает значения из файла).
Так вот, возможна ситуация когда пользователь открое файл и введет туда недопустимы значения не относящиеся к целому типу. Следовательно при вызове метода Read появится ошибка о недопустимом значении. 

Автор: VICTAR 16.4.2008, 23:36
Код

try
except
end

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)