Метод Path.GetTempPath() возвращает UserTempPath с идентификатором GUID в конце при использовании Revit 2020.

Большинство приложений, использующих мою надстройку, возвращают путь «C:\Users\[username]\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\"


person Umar    schedule 11.07.2019    source источник
comment
Вероятно, это связано с тем, что Revit определяет свою собственную переменную среды %TMP/TEMP%.   -  person haim770    schedule 11.07.2019
comment
Я проверил в Watch Window. Вставленные значения возвращаются из метода Path.GetTempPath(). DocumentId добавляется после значения, возвращаемого этим методом. Значение localPath в приведенном выше примере — C:\Users\umar.aslam\AppData\Local\Temp\1affa5dd-2f26-4c96-9965-7a78f5c76321\4f5dce0b-e8d4-a4ea-1285-7765fd82fde1.   -  person Umar    schedule 11.07.2019
comment
Возможный вариант: Path.Combine(System.Environment.GetEnvironmentVariable("LOCALAPPDATA"), "Temp")   -  person haim770    schedule 11.07.2019


Ответы (2)


Согласно эта ссылка на форум, Revit 2020 изменяет возвращаемое значение в соответствии с тем, что вы видите.

Начиная с Revit 2020 запрошенный временный путь содержит дополнительный идентификатор guid в конце пути, который меняется после каждого перезапуска Revit (например, C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\AppData\Local\Temp\84ae8c0d-197b-4b44-b8d3-8823fabbba4f ). Похоже, что Revit изменяет временный путь для области приложения.

person mjwills    schedule 11.07.2019

Я сделал небольшое исправление, которое разбивает путь символом '\' и составляет строку до слова '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);
        }
person icrescenti    schedule 11.07.2019