Как программно ссылаться на каталог C:\Users\Public в С#
Безопасно ли программно ссылаться на общую папку через:
Directory = System.Environment.GetEnvironmentVariable("public")+"MyCompanyName" // etc.
или есть лучший способ?
Опять же, что, если кто-то удаляет переменную окружения для публики и безопасно ли это использовать для разных языковых ОС?
Это следует: Как установить в общий каталог в Windows 7 из проекта установки развертывания VS 2010
Ответы
Ответ 1
Это зависит от того, чего вы хотите достичь.
Существует перечисление, называемое SpecialFolder
. Вы можете использовать его для получения Пути к некоторым Каталогам.
Например:
System.Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory)
указывает на "C:\Users\Public\Desktop".
ИМХО, ваш путь не ошибается, хотя я бы сделал некоторую обработку исключений в случае, если EnvVar действительно отсутствует.
Также вы можете использовать ENUM с "CommonDesktopDirectory" и избавиться от части "\ Desktop".
Ответ 2
Это кажется немного сомнительным, но оно должно работать:
// 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;
Ответ 3
Обратите внимание, что файл Environment.SpecialFolder.CommonDesktopDirectory доступен только в .NET 4.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
Ответ 4
Вы посмотрели на это?
http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx
Задает перечисляемые константы, используемые для получения путей каталога к системным специальным папкам.
Т.е
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Ответ 5
Если вы хотите разместить конкретные данные приложения, к которым могут получить доступ все пользователи, используйте в качестве базы:
Environment.GetFolderPath(SpecialFolder.CommonApplicationData)
Кроме того, рассмотрите возможность использования Path.Combine
для объединения элементов для формирования нового пути:
Path.Combine(
Environment.GetFolderPath(SpecialFolder.CommonApplicationData),
"MyCompanyName")
Ответ 6
Вы можете получить все эти% -ные символы% wildcard, просмотрев
Windows- > Start → 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);
}