В производстве у нас иногда бывает исключение типа «Доступ запрещен».Стек вызовов из этой строки
vXML.SaveToFile (Filename);
, где vXML - IXMLDocument.
Проблема в том, что имя файла не зарегистрировано.Я попробовал эту небольшую тестовую программу.
implementation
uses
xmldoc, Unit12;
{$R *.dfm}
procedure TForm11.FormShow(Sender: TObject);
const
cnFile = 'C:\Program Files (x86)\test.xml';
var
vXML: TAttracsXMLDoc;
begin
vXML := TAttracsXMLDoc.Create(nil);
try
vXML.Active := True;
// Process vXML
vXML.SaveToFile(cnFile);
finally
vXML.Free;
end;
end;
И другой модуль
unit Unit12;
interface
uses
xmldoc,
xml.xmldom,
Xml.XMLIntf;
type
TAttracsXMLDoc = class(TXMLDocument)
procedure SaveToFile(const AFileName: DOMString); override;
end;
implementation
uses
Sysutils;
procedure TAttracsXMLDoc.SaveToFile(const AFileName: DOMString);
begin
try
inherited SaveToFile(AFileName);
except
on E: Exception do
begin
E.Message := E.Message + ' ' + AFileName + ' cannot be saved';
raise;
end;
end;
end;
end.
Работает как задумано.Но проблема в том, что интерфейс IXMLDocument больше не используется.Я хочу использовать код, подобный следующему:
procedure TForm11.FormShow(Sender: TObject);
const
cnFile = 'C:\Program Files (x86)\test.xml';
var
vXML: IXMLDocument;
begin
vXML := NewXMLDocument;
// Process vXML
vXML.SaveToFile(cnFile);
end;
И с минимальными изменениями в существующем коде исключение выше, с явной ошибкой причины.Какой путь лучше?