我們有一個應用程序,通過從TPersistent降序來將項目信息存儲在文件中。我們使用TSteam.ReadComponentRes從流中讀取對象。從流中讀取對象時忽略未知屬性
我們希望能夠打開具有未知屬性的項目文件(來自我們的應用程序的新版本或其他開發分支)。目前,這會導致由TStream創建的TReader中的異常。我們考慮製作一個TStream後代,它使用TReader後代來處理這個異常,而不是停止閱讀。任何人都可以想到一個更優雅的做法嗎?
我們有一個應用程序,通過從TPersistent降序來將項目信息存儲在文件中。我們使用TSteam.ReadComponentRes從流中讀取對象。從流中讀取對象時忽略未知屬性
我們希望能夠打開具有未知屬性的項目文件(來自我們的應用程序的新版本或其他開發分支)。目前,這會導致由TStream創建的TReader中的異常。我們考慮製作一個TStream後代,它使用TReader後代來處理這個異常,而不是停止閱讀。任何人都可以想到一個更優雅的做法嗎?
調用Stream.ReadResHeader,創建TReader實例,設置其OnError事件並調用Reader.ReadRootComponent並釋放讀取器(即模仿TStream.ReadComponentRes的行爲)。
在OnError事件處理程序中,您可以設置處理:= true。
太棒了!我會試試這個! – 2011-06-07 13:52:27
同意,使用'OnError'事件。這裏有一個[示例](http://stackoverflow.com/questions/271843/doublebuffered-property-beeing-added-in-the-dfm-in-delphi- 2009 - does-exist-in/275156#275156)對於'DoubleBuffered'和'ParentDoubleBuffered'屬性在運行時和設計時間都是如此 – 2011-06-07 13:55:27
聽起來不錯,我遇到了'Reader.OnError:= OnReaderError'的問題。我得到一個E2009不兼容的類型:'方法指針和常規程序'錯誤,但是。有任何提示嗎? – boileau 2011-06-07 14:31:58
是的 - 我想知道如何做到這一點。 TReader除外,我不知道如何「恢復」它。這在我的'TpersistentForm'類中引發了問題,該類將所有已發佈的屬性流出到一個銷燬的文件上,並在創建時將它們重新流入。正如你所說,在開發過程中存在很大的問題,我從窗體中添加/刪除控件:(我多年來一直在串行通道中添加以解決大部分問題,但我從來沒有完全開心過。 – 2011-06-07 13:51:02