Làm cách nào để lấy được thư mục người dùng hiện tại?


100

Sử dụng cái này:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Tôi nhận được kết quả này:

"C:\\Documents and Settings\\[USER]\\Application Data"

Làm cách nào để lấy thư mục gốc của tất cả người dùng? I E:

"C:\\Documents and Settings\\[USER]\\"

1
Câu trả lời tôi đã kết thúc bằng cách sử dụng đã bị xóa ... tác phẩm này: Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData))
juan

2
Juan - điều đó không phải lúc nào cũng hiệu quả với bạn - bạn vừa gặp may lần này.
Scott Ivey

tại sao vậy? bạn có nghĩa là như trong vista? hoặc trong xp nó sẽ đột ngột ngừng hoạt động?
juan

5
xem bình luận của Scott về câu trả lời của Jay Riggs. Trên W7 và Vista, các thư mục Application Data là ở một nơi khác nhau, vì vậy bạn sẽ cần phải đi lên 2 thư mục, như trái ngược với 1.
Thomas

Câu trả lời:


48

Có thể đây sẽ là một giải pháp tốt: tính đến việc đây là Vista / Win7 hay XP và không sử dụng các biến môi trường:

string path = Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName;
if ( Environment.OSVersion.Version.Major >= 6 ) {
    path = Directory.GetParent(path).ToString();
}

Mặc dù sử dụng biến môi trường rõ ràng hơn nhiều.


165

Thử:

System.Environment.GetEnvironmentVariable("USERPROFILE");

Biên tập:

Nếu phiên bản .NET bạn đang sử dụng là 4 trở lên, bạn có thể sử dụng kiểu Environment.SpecialFolderliệt kê:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

16
Thực sự là một ý tưởng tồi nếu phụ thuộc vào các biến môi trường để cung cấp cho bạn các đường dẫn thư mục. Có quá nhiều cách để thay đổi các biến môi trường đó. Cách được khuyến nghị là liệt kê Environment.SpecialFolder.
Jim Mischel,

1
Thật không may, như bạn có thể thấy msdn.microsoft.com/en-us/library/… thư mục USERPROFILE không có trong bảng liệt kê đó.
Thomas

Môi trường.SpecialFolder được bao gồm từ .NET 1.1, chỉ không có thư mục "UserProfile" ...
Vini

@JimMischel Nhưng những thứ đó có thể thay đổi được không? Và nếu bạn luôn tham chiếu với biến môi trường thì bạn vẫn ổn.
Nate-Wilkins

22

Bạn có thể lấy đường dẫn UserProfile chỉ với cái này:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);


11

Cũng rất hữu ích, trong khi điều tra Environment.SpecialFolderenum. Sử dụng LINQPad hoặc tạo giải pháp và thực thi mã này:

Enum.GetValues(typeof(Environment.SpecialFolder))
    .Cast<Environment.SpecialFolder>()
    .Select(specialFolder => new
    {
        Name = specialFolder.ToString(),
        Path = Environment.GetFolderPath(specialFolder)
    })
    .OrderBy(item => item.Path.ToLower())

Đường dẫn thư mục

Đây là kết quả trên máy của tôi:

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" là 5 chữ cái đầu tiên trong họ của tôi. Đây là tên người dùng được chỉ định khi đăng nhập bằng Tài khoản Microsoft.)


Tôi không biết làm thế nào mà tôi chưa bao giờ nghe nói về LINQPad, đã thử nó, điều này thật tuyệt, cảm ơn bạn đã giới thiệu nó.
TravisO

4
Environment.GetEnvironmentVariable("userprofile")

Cố gắng điều hướng từ một SpecialFolder được đặt tên sẽ dễ gặp sự cố. Có rất nhiều lý do khiến các thư mục không ở đúng nơi bạn mong đợi - người dùng có thể tự di chuyển chúng, GPO có thể di chuyển chúng, chuyển hướng thư mục sang đường dẫn UNC, v.v.

Việc sử dụng biến môi trường cho tệp người dùng phải phản ánh bất kỳ vấn đề nào có thể xảy ra.


3

Thử:

System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/

1
Điều này sẽ không hoạt động trên Windows 7 và tôi cho rằng cũng sẽ không hoạt động trên vista nếu tôi nhớ đúng cấu trúc thư mục. Vào ngày 7, bạn sẽ phải đi lên 2 thư mục mẹ kể từ khi thư mục ApplicationData là \% userprofile% \ AppData \ Roaming \
Scott Ivey

Đó là lợi nhuận "C: \ Users \ Fredrik \ AppData" trên máy tính Vista của tôi (thư mục ApplicationData là "C: \ Users \ Fredrik \ AppData \ Roaming")
Fredrik Mork


-3
$env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\"

Hãy xem các bình luận về câu hỏi. Đây không phải là trường hợp cho tất cả các phiên bản Windows.
Wai Ha Lee

-3

bạn có thể sử dụng mã sau:

if(Platform.Equals("WinCE"))
{
    m_CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
}
else if(Platform.Equals("Win32NT"))
{
    m_CurrentPath = Directory.GetCurrentDirectory();
}

xem thêm thông tin: Lấy Đường dẫn Thư mục Hiện tại trong cả WinXP và WinCE với C #


3
Điều này hoàn toàn không phù hợp ở đây. OP đang yêu cầu thư mục người dùng hiện tại , không phải thư mục đang làm việc.
julealgon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.