Как получить исходное местоположение AppData \ Roaming после того, как пользователь его изменил? - PullRequest
1 голос
/ 03 июня 2019

Мне нужно получить доступ к содержимому в папке %AppData%\Roaming\Microsoft.

Обычно это работает нормально, выполнив следующее:

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft");

Проблема в том, что теперь проводник позволяет вам изменить местоположение %AppData%, щелкнув правой кнопкой мыши папку «Роуминг» и установив местоположение в каком-то другом месте. Однако это не меняет расположение папки Microsoft, которая останется в исходном %AppData%.

Я думал о том, чтобы сделать что-то вроде этого:

string roaming = "C:\Users\" + Environment.UserName + @"\AppData\Roaming";

Хотя это выглядит плохо и выглядит так, как будто оно может легко сломаться. Есть предложения?

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Я не знаю, сможет ли это сделать .NET, но WinAPI может.PInvoke SHGetFolderPath с флагом SHGFP_TYPE_DEFAULT:

using System;
using System.Runtime.InteropServices;

namespace Test { class TestApp {
public class WinApi
{
  public const int CSIDL_APPDATA = 0x1a;
  public const int SHGFP_TYPE_DEFAULT = 1;
  [DllImport("shell32.dll")]
  public static extern int SHGetFolderPath(IntPtr hwnd, int csidl, IntPtr hToken, uint flags, [Out] System.Text.StringBuilder Path);
}

[STAThread]
static void Main() 
{
  System.Text.StringBuilder builder = new System.Text.StringBuilder(260);
  int result = WinApi.SHGetFolderPath(IntPtr.Zero, WinApi.CSIDL_APPDATA, IntPtr.Zero, WinApi.SHGFP_TYPE_DEFAULT, builder);
  string path = "";
  if (result == 0) path = builder.ToString();
  Console.WriteLine(string.Format("{0}:{1}", result, path));
}
} }
0 голосов
/ 03 июня 2019

Вы можете попробовать использовать следующий код для доступа к% AppData% \ Roaming \ Microsoft:

string appData= Environment.ExpandEnvironmentVariables("%AppData%");
string roamingMicrosoft = Path.Combine(appData, @"Microsoft");

Но я не совсем уверен, меняет ли Windows переменную среды% AppData% по умолчанию, когда пользователь самостоятельно меняет путь к AppData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...