C#获取%AppData%的路径

C#2008 SP1

我使用下面的代码:

dt.ReadXml("%AppData%DateLinks.xml");

但是,我收到一个异常,指向我的应用程序运行的位置:

无法找到'D: Projects SubVersionProjects CatDialer bin Debug %AppData% DateLinks.xml'路径的一部分。

我认为%AppData%应该找到相对路径。 当我去Start|Run|%AppData% Windows资源管理器把我带到那个目录。

由于每台客户端计算机上的用户不同,我无法放入完整路径。

非常感谢您的任何建议,


要获得AppData目录,最好使用GetFolderPath方法:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

%AppData%是一个环境变量,并且它们不会在.NET中的任何位置自动扩展,但您可以显式使用Environment.ExpandEnvironmentVariable方法来执行此操作。 不过,我仍然强烈建议您使用GetFolderPath ,因为JohannesRössel在评论中指出,在某些情况下可能不会设置%AppData%

最后,创建如下例所示的路径:

var fileName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.ApplicationData), "DateLinks.xml");

如果你在说ASP.NET,路径是不同的。

我找不到任何指向/ App_Data for ASP.NET的'SpecialFolder'值。

相反,你需要这样做:

 HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")  

(注意:你不需要MVC控制器中的'Current'属性)

如果另一种更加'抽象'的方式去App_Data会喜欢听到如何。


使用AppData目录的最佳方式使用Environment.ExpandEnvironmentVariable方法。

原因:

  • 它用有效的目录或其他来替换你的字符串的一部分
  • 它是不区分大小写的
  • 它很容易和简单
  • 这是一个标准
  • 适合处理用户输入
  • 例子:

    string path;
    path = "%AppData%stuff";
    path = "%aPpdAtA%HelloWorld";
    path = "%progRAMfiLES%Adobe;%appdata%FileZilla"; // collection of paths
    
    path = Environment.ExpandEnvironmentVariables(path);
    Console.WriteLine(path);
    

    记住一些用户键入%AppData% ,一些%appdata%和一些%APpData%你不想最终:

    if (path.ToLower().StartsWith("%appdata%"))
        ; // path manipulation
    if (path.ToLower().StartsWith("%programfiles%"))
        ; // path manipulation
    

    如果没有设置环境变量,这是不是你的错(除了时)。 我通常不会告诉人们不要重新发明轮子,但是当我第一次走向另一条路时,意识到这是一个糟糕的主意。

    链接地址: http://www.djcxy.com/p/6125.html

    上一篇: C# getting the path of %AppData%

    下一篇: Validate a username and password against Active Directory?