プログラムでパブリックフォルダを参照するのは安全ですか?
Directory = System.Environment.GetEnvironmentVariable("public")+"MyCompanyName" // etc.
またはもっと良い方法はありますか?
繰り返しますが、誰かがパブリックの環境変数を削除した場合はどうなりますか?これは異なる言語のOSで安全に使用できますか?
これは次のとおりです。 VS2010展開セットアッププロジェクトからWindows7のパブリックディレクトリにインストールする方法
それはあなたが何を達成したいかによります。 SpecialFolder
という列挙型があります。これを使用して、一部のディレクトリへのパスを取得できます。例えば:
System.Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory)
「C:\ Users\Public\Desktop」を指します。
私見、あなたのやり方は間違っていませんが、EnvVarが本当に欠落している場合に備えて、いくつかの例外処理を行います。また、「CommonDesktopDirectory」でENUMを使用して、「\ Desktop」の部分を取り除くこともできます。
これは少し疑わしいようですが、それははず動作します:
// This should give you something like C:\Users\Public\Documents
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments);
var directory = new DirectoryInfo(documentsPath);
// Now this should give you something like C:\Users\Public
string commonPath = directory.Parent.FullName;
Environment.SpecialFolder.CommonDesktopDirectoryは.NET4.0でのみ使用可能であることに注意してください。 .NET 3.5システム(Windows 7またはXP)では、シェルフォルダーのレジストリキーを使用しました。私のコードスニペットはVB.NETにあります。
Private mRegShellPath="Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Private mCommonDesktop = Nothing
' dgp rev 3/8/2012
Private ReadOnly Property CommonDesktop As String
Get
If mCommonDesktop Is Nothing Then
Dim RegKey As RegistryKey
Try
RegKey = Registry.LocalMachine.OpenSubKey(mRegShellPath, False)
mCommonDesktop = RegKey.GetValue("Common Desktop")
Catch ex As Exception
mCommonDesktop = ""
End Try
End If
Return mCommonDesktop
End Get
End Property
すべてのユーザーがアクセスできるアプリケーション固有のデータを配置する場所が必要な場合は、ベースとして使用します。
Environment.GetFolderPath(SpecialFolder.CommonApplicationData)
また、Path.Combine
を使用して要素を組み合わせ、新しいパスを形成することを検討してください。
Path.Combine(
Environment.GetFolderPath(SpecialFolder.CommonApplicationData),
"MyCompanyName")
これを見たことがありますか?
http://msdn.Microsoft.com/en-us/library/system.environment.specialfolder.aspx
システムの特別なフォルダへのディレクトリパスを取得するために使用される列挙定数を指定します。
つまり
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
調べることで、これらすべての%wildcard%リテラルを取得できます
Windows->スタート-> regedit->
次に、実行します
using System;
string path2Downloads = Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads");
string path2Music = Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Music");
...など....そしてテストするには:
using System.IO;
string[] files = { "" };
if (Directory.Exists(path2Music)) {
files = Directory.GetFiles(path2Music);
}