如何使用Revit API获取Revit文件版本?

时间:2013-01-23 14:06:49

标签: c# revit revit-api

在Revit API中,我知道我可以获取当前正在运行的Revit实例的版本(ControlledApplication.VersionBuildControlledApplication.VersionNameControlledApplication.VersionNumber)。但是,我想在打开之前获取Revit文件的版本。这样我就可以停止自动升级对话框,该对话框显示用户在较新版本的Revit中打开较旧的Revit文件。我正在使用Revit 2013并期待2011年,2012年和2013年的文件。

Similar Autodesk Discussion Group Question
Building Coder

1 个答案:

答案 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