web-dev-qa-db-ja.com

C#でプログラムでC:\ Users \ Publicディレクトリを参照する方法

プログラムでパブリックフォルダを参照するのは安全ですか?

Directory = System.Environment.GetEnvironmentVariable("public")+"MyCompanyName" // etc.

またはもっと良い方法はありますか?

繰り返しますが、誰かがパブリックの環境変数を削除した場合はどうなりますか?これは異なる言語のOSで安全に使用できますか?

これは次のとおりです。 VS2010展開セットアッププロジェクトからWindows7のパブリックディレクトリにインストールする方法

16
Jeb

それはあなたが何を達成したいかによります。 SpecialFolder という列挙型があります。これを使用して、一部のディレクトリへのパスを取得できます。例えば:

System.Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory)

「C:\ Users\Public\Desktop」を指します。

私見、あなたのやり方は間違っていませんが、EnvVarが本当に欠落している場合に備えて、いくつかの例外処理を行います。また、「CommonDesktopDirectory」でENUMを使用して、「\ Desktop」の部分を取り除くこともできます。

15
Stoggy

これは少し疑わしいようですが、それははず動作します:

// 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;
16
Dan Tao

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
6
dgp

すべてのユーザーがアクセスできるアプリケーション固有のデータを配置する場所が必要な場合は、ベースとして使用します。

Environment.GetFolderPath(SpecialFolder.CommonApplicationData)

また、Path.Combineを使用して要素を組み合わせ、新しいパスを形成することを検討してください。

Path.Combine(
    Environment.GetFolderPath(SpecialFolder.CommonApplicationData),
    "MyCompanyName")
4
Ben M

これを見たことがありますか?

http://msdn.Microsoft.com/en-us/library/system.environment.specialfolder.aspx

システムの特別なフォルダへのディレクトリパスを取得するために使用される列挙定数を指定します。

つまり

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
4
Pauli Østerø

調べることで、これらすべての%wildcard%リテラルを取得できます

Windows->スタート-> regedit->

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

次に、実行します

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);
}
2
Jenna Leaf