簡體   English   中英

展開“我的文檔”的環境變量

[英]Expand environment variable for My Documents

我知道我可以讀取這樣的環境變量:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

但是,如果我能做到這樣的話,對我來說真的很有幫助:

Environment.ExpandEnvironmentVariables(@"%MyDocuments%\Foo");

是否有一個等於SpecialFolder.MyDocuments的環境變量?

我也試圖做這樣的事情,但這不會導致預期的結果:

Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\My Documents\Foo");

這樣我就得到了類似@"C:\\Users\\<MyUser>\\My Documents\\Foo"但我需要的是@"\\\\someservername\\users$\\<MyUser>\\My Documents\\Foo"

編輯:我的目標不是硬編碼環境變量或之后的部分。

還有其他建議嗎?

沒有MyDocuments特殊文件夾的環境變量(對於SpecialFolder枚舉的大多數成員也是如此)。

看看這個片段 ,它可能正是您要搜索的內容。

它允許你做這樣的事情:

string fullPath = SpecialFolder.ExpandVariables(@"%MyDocuments%\Foo");

注意:SpecialFolder.ExpandVariables是上述代碼段中引入的輔助類的靜態方法。

是否有一個等於SpecialFolder.MyDocuments的環境變量?

簡答: 不。

答案很長:
仍然沒有。 您可以在命令提示符下鍵入"set"以查看所有當前環境變量。 我在我的個人資料中找不到任何我的文檔文件夾(在WinXP和Win7上試過)。

此外,擴展"%USERPROFILE%\\My Documents"將是不正確的,因為用戶的文檔文件夾可能在其他任何地方(例如,在我的家用PC上,我總是將我的D:\\Documents改為D:\\Documents )。

如果您確實需要使用環境變量,一個解決方案可能是自己設置變量:

// this environment variable is created for the current process only
string documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Environment.SetEnvironmentVariable("MYDOCUMENTS", documents);

另一種解決方案可能是在路徑中使用“假”環境變量並自行擴展,例如:

string path = "%MYDOCUMENTS%\\Foo"; // read from config

// expand real env. vars
string expandedPath1 = Environment.ExpandEnvironmentVariables(path);

// expand our "fake" env. var
string documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string expandedPath2 = path.Replace("%MYDOCUMENTS%", documents);

我不確定是否有一個很好的方法來做到這一點,而不是嘗試進行環境擴展來獲取路徑為什么不使用Path.Combine API?

Path.Combine(
  Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
  "Foo");

你究竟想做什么? 你有什么理由不能使用Path.Combine嗎?

string docs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string foo = Path.Combine(docs, "Foo");

您可以使用Environment.GetEnvironmentVariable方法擴展環境變量。 鑒於您的評論,我建議您將您的路徑分成兩個單獨的配置設置,以便更容易擴展:

string variablePath = "%appdata%".Trim('%'); //read from some config setting
string appdataPath = Environment.GetEnvironmentVariable(variablePath);
string subdir = "foo";  //some other config setting
string myDir = Path.Combine(appdataPath, subdir);

不,它不存在。 最簡單的檢查方法是從命令行運行“set”並查看自己。

Start-> run -> cmd
set
set |findstr /i documents

暫無
暫無

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

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