C#获取%AppData%的路径

时间:2009-05-15 08:01:00

标签: c# .net path

C#2008 SP1

我正在使用以下代码:

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

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

  

无法找到路径的一部分   'd:\项目\ SubVersionProjects \ CatDialer \ BIN \调试\%APPDATA%\ DateLinks.xml'。

我认为%AppData%应该找到相对路径。当我走Start|Run|%AppData%时,Windows资源管理器会将我带到该目录。

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

10 个答案:

答案 0 :(得分:726)

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

(如果不存在,必须添加using System。)

%AppData%是一个环境变量,虽然您可以明确使用Environment.ExpandEnvironmentVariable方法来实现,但它们不会在.NET中的任何位置自动扩展。我仍然强烈建议你使用GetFolderPath,因为正如JohannesRössel在评论中指出的那样,在某些情况下可能不会设置%AppData%

最后,要创建示例中显示的路径:

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

答案 1 :(得分:48)

如果您正在谈论ASP.NET,那么路径会有所不同。

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

相反,你需要这样做:

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

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

如果有另一种更“抽象”的方式来到App_Data会喜欢听到如何。

答案 2 :(得分:28)

最佳方式使用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 )。我通常不会告诉人们重新发明轮子,但是在我第一次走向另一条路并意识到这是一个坏主意之后。

答案 3 :(得分:22)

您也可以使用

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

展开%AppData%变量。

答案 4 :(得分:15)

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

答案 5 :(得分:6)

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

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

答案 6 :(得分:3)

只想分享另一种访问App_Data'的方法。我的mvc应用程序中的文件夹,以防有人需要这个。

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

AppData⇝本地,又名({{1)}:

C:\Users\<user>\AppData\Local

AppData⇝漫游,又名({{1)}:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

另外,可能很容易知道:

  • C:\Users\<user>\AppData\Roaming-用于程序文件X64文件夹
  • Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) -用于程序文件X86文件夹

要查看完整列表,请检查here

相关问题