簡體   English   中英

C# 獲取 %AppData% 的路徑

[英]C# getting the path of %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)

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

%AppData%是一個環境變量,它們不會在 .NET 中的任何地方自動擴展,盡管您可以顯式使用Environment.ExpandEnvironmentVariable方法來這樣做。 但是,我仍然強烈建議您使用GetFolderPath ,因為正如 Johannes Rössel 在評論中指出的那樣,在某些情況下可能不會設置%AppData%

最后,要創建如示例中所示的路徑:

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

如果您說的是 ASP.NET,則路徑會有所不同。

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

相反,您需要這樣做:

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

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

如果有另一種更“抽象”的方式來訪問App_Data很想聽聽如何。

使用 AppData 目錄的最佳方式使用Environment.ExpandEnvironmentVariables方法。

原因:

  • 它用有效目錄或其他任何內容替換部分字符串
  • 它不區分大小寫
  • 簡單易行
  • 這是一個標准
  • 適合處理用戶輸入

例子:

string path;
path = @"%AppData%\stuff";
path = @"%aPpdAtA%\HelloWorld";
path = @"%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths

path = Environment.ExpandEnvironmentVariables(path);
Console.WriteLine(path);

更多信息:

%ALLUSERSPROFILE%   C:\ProgramData
%APPDATA%   C:\Users\Username\AppData\Roaming
%COMMONPROGRAMFILES%    C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)%   C:\Program Files (x86)\Common Files
%COMSPEC%   C:\Windows\System32\cmd.exe
%HOMEDRIVE% C:
%HOMEPATH%  C:\Users\Username
%LOCALAPPDATA%  C:\Users\Username\AppData\Local
%PROGRAMDATA%   C:\ProgramData
%PROGRAMFILES%  C:\Program Files
%PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version)
%PUBLIC%    C:\Users\Public
%SystemDrive%   C:
%SystemRoot%    C:\Windows
%TEMP% and %TMP%    C:\Users\Username\AppData\Local\Temp
%USERPROFILE%   C:\Users\Username
%WINDIR%    C:\Windows

你也可以使用

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

擴展%AppData%變量。

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

AppData ⇝ 本地又名( C:\\Users\\<user>\\AppData\\Local ):

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

AppData ⇝ 漫游又名( C:\\Users\\<user>\\AppData\\Roaming ):

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

此外,了解以下信息可能會很方便:

  • Environment.SpecialFolder.ProgramFiles - 用於程序文件 X64 文件夾
  • Environment.SpecialFolder.ProgramFilesX86 - 用於程序文件 X86 文件夾

有關完整列表,請查看此處

我不認為將 %AppData% 放在這樣的字符串中會起作用。

嘗試

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

只是想在我的 mvc 應用程序中分享另一種訪問“App_Data”文件夾的方式,以防有人需要它。

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

這在控制台應用程序中對我有用 -

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

對於 ASP.NET,需要在應用程序池上設置Load User Profile設置,但這還不夠。 \\Windows\\System32\\inetsrv\\Config\\applicationHost.config有一個名為setProfileEnvironment的隱藏設置,由於某種原因,該設置在默認情況下處於關閉狀態,而不是如文檔中所述。 您可以更改默認值或在您的應用程序池中設置它。 Environment類上的所有方法都將返回正確的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM