ArcMap扩展GetTempPath返回一个额外的SubFolder

时间:2013-06-28 16:04:04

标签: .net arcgis esri arcmap

我正在使用C#/ WPF / VS2010为ArcMap创建可安装的扩展程序。 (这里可能有也可能没有任何影响)。我想做的一件事是将数据存储在用户临时文件夹中。所以,我得到了这样的文件夹:

public static string SystemTempPath = Path.GetTempPath();

当我编译所有内容并绑定到WPF设计器中的变量(间接)时,我在预览窗格中得到了这个:

"C:\Users\<username>\AppData\Local\Temp\"

很好,这就是我所追求的。但是当我在ArcMap中运行扩展时,我会得到如下内容:

"C:\Users\<username>\AppData\Local\Temp\arcA6C5\"

请注意每次重新加载ArcMap时更改的额外文件夹。所以似乎因为这是一个扩展,我有点受ArcMap内核的支配,它使用的是ArcMap创建的临时文件夹而不是用户temp var。

我的问题:除了字符串操作之外,有没有办法在语法上解决这个问题?我可以假设这个额外的东西总是在那里,只是截断,但这种方式似乎有点脏。我也尝试了同样的结果:

System.Environment.GetEnvironmentVariable("TEMP");
System.Environment.GetEnvironmentVariable("TMP");

无论如何,这只会略微变脏。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

问题是ArcMap正在改变它的运行时环境(TEMPTMP环境变量),以便为每次运行创建一个唯一的临时文件夹。用于检索临时文件夹的任何Windows API调用都将返回更新的(按设计)。

  

我想做的一件事是将数据存储在用户临时文件夹中。

我建议将数据存储在user's application data folder内。这是存储用户数据的适当位置,并且将保持一致。尝试类似:

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
path = Path.Combine(path, @"YourCompany\YourProduct\");