首页 文章

C#获取%AppData%的路径

提问于
浏览
324

C#2008 SP1

我使用下面的代码:

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

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

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

我以为 %AppData% 应该找到相对路径 . 当我去 Start|Run|%AppData% windows explorer带我到那个目录 .

我无法将完整路径放入,因为每台客户端计算机上的用户不同 .

非常感谢任何建议,

9 回答

  • 20

    你也可以使用

    Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");
    

    扩展 %AppData% 变量 .

  • 46

    在.net2.0中你可以使用变量 Application.UserAppDataPath

  • 1

    我不认为将%AppData%放在这样的字符串中会起作用 .

    尝试

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
    
  • 6

    这对我来说是一个控制台应用程序 -

    string appData = System.Environment.GetEnvironmentVariable("APPDATA");
    
  • 690

    BEST 方式使用AppData目录, IS 使用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
    

    如果未设置环境变量,则不是您的错(除非 IS ) . 我通常不会告诉人们重新发明轮子,但是在我第一次走向另一条路并意识到这是一个坏主意之后 .

  • 25

    只是想在我的mvc应用程序中共享另一种访问“App_Data”文件夹的方式,以防有人需要这个 .

    Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data")
    
  • 13

    如果您正在谈论ASP.NET,那么路径就不同了 .

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

    相反,你需要这样做:

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

    (注意:您不需要MVC控制器中的“当前”属性)

    如果还有另一种'abstract'方式来到 App_Data 会喜欢听到如何 .

  • 3

    对于ASP.NET,需要在应用程序池上设置 Load User Profile 设置,但这还不够 . \Windows\System32\inetsrv\Config\applicationHost.config 中有一个名为 setProfileEnvironment 的隐藏设置,由于某种原因,默认情况下会关闭,而不是documentation中所述 . 您可以更改默认值或在应用池上设置默认值 . 然后 Environment 类上的所有方法都将返回正确的值 .

  • 0

    要获取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");
    

相关问题