当使用Revit 2020时,Path.GetTempPath()方法返回带有GUID结尾的UserTempPath。

8

大多数使用我的插件的应用程序返回路径 "C:\Users\[用户名]\AppData\Local\Temp\"。但是有一个应用程序返回路径 "C:\Users\[用户名]\AppData\Local\Temp\1affa5dd-2f26-4c96-9965-7a78f5c76321\",末尾的GUID每次启动应用程序时都会更改。

我正在运行我的插件的应用程序是Revit 2015-2020。Revit版本2015-2019返回正确的路径。但是Revit 2020在路径末尾添加了GUID。代码保持不变。

    public static string GetLocalFilePath(string sourceUri, string fileName, string extension)
    {
        string[] sasTokenSeparated = sourceUri.Split('?');
        string[] uriParts = sasTokenSeparated[0].Split('/');
        string documentId = uriParts[uriParts.Length - 2];
        documentId = documentId.Split('.')[0];
        string extensionWithDot = string.Empty;
        if (!extension.StartsWith("."))
        {
            extensionWithDot = "." + extension;
        }
        else
        {
            extensionWithDot = extension;
        }
        string localPath = Path.Combine(Path.GetTempPath(), documentId, fileName + fileExtension);
        return localPath;
    }

我期望的路径是,"C:\Users\[用户名]\AppData\Local\Temp\"

但实际上我获取到的路径是,"C:\Users\[用户名]\AppData\Local\Temp\1affa5dd-2f26-4c96-9965-7a78f5c76321\"


1
这很可能是由于Revit定义了自己的%TMP / TEMP%环境变量。 - haim770
1
我已经在监视窗口中检查过了。我粘贴的值是从Path.GetTempPath()方法返回的。DocumentId附加在从该方法返回的值之后。 上面的localPath值为"C:\Users\umar.aslam\AppData\Local\Temp\1affa5dd-2f26-4c96-9965-7a78f5c76321\4f5dce0b-e8d4-a4ea-1285-7765fd82fde1"。 - Umar
1
可能的替代方案是:Path.Combine(System.Environment.GetEnvironmentVariable("LOCALAPPDATA"), "Temp") - haim770
3个回答

8
根据此论坛链接Revit 2020会根据您所见的内容更改返回的值。
自从Revit 2020以来,请求的临时路径在路径末尾包含了一个附加的GUID,每次重新启动Revit后都会更改(例如C:\Users\USERNAME\AppData\Local\Temp\84ae8c0d-197b-4b44-b8d3-8823fabbba4f)。看起来Revit会在应用程序范围内更改临时路径。

2
我进行了一个小修复,它通过 '\' 字符拆分路径并组合一个字符串直到单词 'Temp',它可以工作,但是请将其视为一个概念。"最初的回答"
private void concept()
        {
            string fullpath = Path.GetTempPath();
            string[] ph = fullpath.Split('\\');
            bool fix = false;
            string fixedpath = "";
            foreach (string word in ph)
            {

                if (fix == false)
                {
                    fixedpath = fixedpath + word + @"\";
                }
                if (word.ToLower().Equals("temp"))
                {
                    fix = true;
                }

            }
            MessageBox.Show(fixedpath);
        }

0
Path.Combine(
  Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
  "AppData",
  "Local",
  "Temp");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接