كيف يمكنني الحصول على دليل المستخدم الحالي؟
-
16-09-2019 - |
سؤال
باستخدام هذا:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
أحصل على هذا الإخراج:
"C:\\Documents and Settings\\[USER]\\Application Data"
كيف يمكنني الحصول على الدليل الجذر لجميع المستخدمين؟ بمعنى آخر:
"C:\\Documents and Settings\\[USER]\\"
المحلول
قد يكون هذا هو الحل الجيد: مع الأخذ في الاعتبار ما إذا كان هذا هو Vista / Win7 أو XP ودون استخدام متغيرات البيئة:
string path = Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName;
if ( Environment.OSVersion.Version.Major >= 6 ) {
path = Directory.GetParent(path).ToString();
}
على الرغم من استخدام متغير البيئة أكثر وضوحا.
نصائح أخرى
يحاول:
System.Environment.GetEnvironmentVariable("USERPROFILE");
يحرر:
إذا كان إصدار .NET الذي تستخدمه هو 4 أو أعلى، فيمكنك استخدام Environment.SpecialFolder
تعداد:
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
يمكنك الحصول على مسار UserProfile مع هذا فقط:
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
أيضا مفيدة للغاية، في حين التحقيق في Environment.SpecialFolder
العادة. استخدم LinQPad أو إنشاء حل وتنفيذ هذا الرمز:
Enum.GetValues(typeof(Environment.SpecialFolder))
.Cast<Environment.SpecialFolder>()
.Select(specialFolder => new
{
Name = specialFolder.ToString(),
Path = Environment.GetFolderPath(specialFolder)
})
.OrderBy(item => item.Path.ToLower())
هذه هي النتيجة على جهازي:
MyComputer
LocalizedResources
CommonOemLinks
ProgramFiles C:\Program Files (x86)
ProgramFilesX86 C:\Program Files (x86)
CommonProgramFiles C:\Program Files (x86)\Common Files
CommonProgramFilesX86 C:\Program Files (x86)\Common Files
CommonApplicationData C:\ProgramData
CommonStartMenu C:\ProgramData\Microsoft\Windows\Start Menu
CommonPrograms C:\ProgramData\Microsoft\Windows\Start Menu\Programs
CommonAdminTools C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
CommonStartup C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
CommonTemplates C:\ProgramData\Microsoft\Windows\Templates
UserProfile C:\Users\fisch
LocalApplicationData C:\Users\fisch\AppData\Local
CDBurning C:\Users\fisch\AppData\Local\Microsoft\Windows\Burn\Burn
History C:\Users\fisch\AppData\Local\Microsoft\Windows\History
InternetCache C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCache
Cookies C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCookies
ApplicationData C:\Users\fisch\AppData\Roaming
NetworkShortcuts C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Network Shortcuts
PrinterShortcuts C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
Recent C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Recent
SendTo C:\Users\fisch\AppData\Roaming\Microsoft\Windows\SendTo
StartMenu C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu
Programs C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
AdminTools C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
Startup C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Templates C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Templates
Desktop C:\Users\fisch\Desktop
DesktopDirectory C:\Users\fisch\Desktop
Favorites C:\Users\fisch\Favorites
MyMusic C:\Users\fisch\Music
MyDocuments C:\Users\fisch\OneDrive\Documents
MyDocuments C:\Users\fisch\OneDrive\Documents
MyPictures C:\Users\fisch\OneDrive\Pictures
MyVideos C:\Users\fisch\Videos
CommonDesktopDirectory C:\Users\Public\Desktop
CommonDocuments C:\Users\Public\Documents
CommonMusic C:\Users\Public\Music
CommonPictures C:\Users\Public\Pictures
CommonVideos C:\Users\Public\Videos
Windows C:\Windows
Fonts C:\Windows\Fonts
Resources C:\Windows\resources
System C:\Windows\system32
SystemX86 C:\Windows\SysWoW64
بالمناسبة. "FISCH" هو أول 5 أحرف اسمي الأخير (وهي الألمانية ل "الأسماك"). وبعد هذا هو اسم المستخدم المعين عند تسجيل الدخول باستخدام حساب Microsoft.
Environment.GetEnvironmentVariable("userprofile")
محاولة التنقل من أعلى من الطاقات المسماة عرضة للمشاكل. هناك الكثير من الأسباب التي لا تتوقعها المجلدات حيث تتوقعها - يمكن للمستخدمين نقلها بمفردهم، يمكن ل GPO نقلها، إعادة توجيه المجلد إلى مسارات UNC، إلخ.
باستخدام متغيرات البيئة بالنسبة للمستخدم، يجب أن تعكس أي من تلك المشكلات المحتملة.
يحاول:
System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/
العبث حول متغيرات البيئة أو إزاحة مجلد الوالد المشفوف به من الصعب ليست فكرة جيدة أبدا عندما يكون هناك API للحصول على المعلومات التي تريدها، اتصل SHGetSpecialFolderPath(...,CSIDL_PROFILE,...)
$env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\"
يمكنك استخدام التعليمات البرمجية التالية:
if(Platform.Equals("WinCE"))
{
m_CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
}
else if(Platform.Equals("Win32NT"))
{
m_CurrentPath = Directory.GetCurrentDirectory();
}
مزيد من المعلومات احصل على مسار الدليل الحالي في كل من WinXP و WINCE مع C #