在Revit API中,我知道我可以获取当前正在运行的Revit实例的版本(ControlledApplication.VersionBuild
,ControlledApplication.VersionName
,ControlledApplication.VersionNumber
)。但是,我想在打开之前获取Revit文件的版本。这样我就可以停止自动升级对话框,该对话框显示用户在较新版本的Revit中打开较旧的Revit文件。我正在使用Revit 2013并期待2011年,2012年和2013年的文件。
答案 0 :(得分:3)
正如您所说,Revit文件格式是Structired Storage文档,您需要的信息存储在 BasicFileInfo 流中。
Here是演示如何提取BasicFileInfo数据的完整控制台应用程序
不幸的是我不知道BasicFileInfoStream的格式。但是如果你把它读成字符串,你就可以获得创建文件的版本。
读取唯一的BasicFileInfo比读取整个文件要好得多。 想象一下,如果Revit项目超过500 MB或更多。当你打电话
string fileContents = streamReader.ReadToEnd();
将整个文件写入内存。
此外,巨大文件上的正则表达式运行缓慢。
我认为你应该使用
var rawString = System.Text.Encoding.Unicode.GetString(rawData);
从我的示例中使用rawString中的Regex而不是整个文件。
希望它有所帮助。
<强>更新:强>
我完全忘了。
在Revit 2013中,您可以使用SavedInCurrentVersion
类的BasicFileInfo
属性来确定文件是否以当前Revit版本保存。如果要获取保存文件的版本(如问题标题中所示),可以使用同一类的SavedInVersion
属性。您可以使用BasicFileInfo.Extract
方法获取BasicFileInfo
。