以编程方式确定ArcGIS Layer(*。lyr)文件版本


10

我已经尝试过通过IStorage,Microsoft复合文件规范,ArcObjects反序列化等方法来尝试检测.lyr文件版本。

使用ArcObjects,我可以获取Layer属性,数据源,范围等信息,但是LayerFileClass的documentVersion属性始终在9.3 Layer文件上报告“ esriArcGISVersion10”。

ILayerFile l = new LayerFileClass();
l.Open(fileName);
LayerFileClass t = (LayerFileClass)l;
string version = t.DocumentVersion.ToString();

任何帮助表示赞赏。

请注意这篇来自2007年的古板论坛帖子


在.NET和Java中,您得到不同的结果吗?
Kirk Kuykendall,2012年

1
您是否尝试使用MemoryBlobStreamClass而不是LayerFileClass?使用IMemoryBlobStream.LoadFromFile打开lyr文件,然后转换为IDocumentVersion。
柯克·库肯达尔

RE评论2:我刚刚尝试过-我得到esriArcGISVersion10的8.3、9 / 9.1、9.2和9.3层文件。RE评论1:Java。那是什么?;) 谢谢你的帮助。我认为这是不可能的。
valveLondon 2012年

如果我们了解您为什么尝试检测.lyr文件版本,这可能会有所帮助。
Stephen Quan

1
因为我想知道版本是什么。
valveLondon 2012年

Answers:


6

加载图层文件后,它是当前版本,因为打开会对其进行升级。DocumentVersion属性仅用于设置要使用LayerFile类保存回先前版本的版本。

实际的文档版本未写入图层文件。唯一写入的版本信息是对象的内部持久性版本。可以通过结构化存储来提取此信息,但是您需要针对每种可能的图层类型查找此版本号(并且还需要提取图层类型guid甚至可以告知图层类型)。


感谢您的回答,但我对此有些迷惑。8.3,9 / 9.1,9.2,9.3和10:据我可以告诉有五种可能的版本-什么是“一切可能的层型”的含义
valveLondon

通过图层类型,我指的是FeatureLayer,RasterLayer,GroupLayer等。–
Craig Williams
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.