2009-07-16 23 views
60

Usando questo:Come posso ottenere la directory utente corrente?

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

ottengo questo output:

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

Come posso ottenere la directory radice di tutti gli utenti? vale a dire:

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

La risposta che ho usato è stata cancellata ... funziona: Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData)) – juan

+1

Juan - che non funzionerà sempre per te - sei appena diventato fortunato questa volta . –

+0

perché è così? intendi come in vista? o in xp smetterà improvvisamente di funzionare? – juan

risposta

34

può essere questo sarà una buona soluzione: prendendo in considerazione se questo è Vista/Win7 o XP e senza usare le variabili di ambiente:

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

pur usando la variabile d'ambiente è molto più chiara.

3

Prova:

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

Questo non funzionerà su Windows 7 e presumo che non funzionerà su Vista se ricordo bene la struttura della cartella. Il 7, dovresti andare su 2 cartelle madri poiché la cartella ApplicationData è \% userprofile% \ AppData \ Roaming \ –

+0

Che restituisce "C: \ Users \ Fredrik \ AppData" sul mio computer Vista (la cartella ApplicationData è " C: \ Users \ Fredrik \ AppData \ Roaming ") –

114

Prova:

System.Environment.GetEnvironmentVariable("USERPROFILE"); 

Edit:

Se la versione di .NET si sta utilizzando è 4 o superiore, si può usare l'enumerazione Environment.SpecialFolder:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 
+11

È una pessima idea dipendere dalle variabili di ambiente per darti i percorsi della cartella. Ci sono troppi modi in cui le variabili d'ambiente possono essere modificate. Il modo consigliato è con l'enumerazione Environment.SpecialFolder. –

+1

Sfortunatamente, come potete vedere http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx la cartella USERPROFILE non è contenuta in tale enumerazione. – Thomas

+0

The Environment.SpecialFolder è incluso da .NET 1.1, semplicemente non ha la cartella "UserProfile" ... – Vini

4
Environment.GetEnvironmentVariable("userprofile") 

Cercare di spostarsi da una SpecialFolder con nome è soggetto a problemi. Esistono molte ragioni per cui le cartelle non saranno quelle in cui ti aspetti: gli utenti possono spostarle da sole, il GPO può spostarle, il reindirizzamento delle cartelle ai percorsi UNC, ecc.

Utilizzare il environment variable per il profilo utente dovrebbe riflettere uno qualsiasi di questi possibili problemi.

-3

è possibile utilizzare il seguente codice:

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

ulteriori informazioni si veda: Get Current Directory Path in both WinXP and WinCE with C#

+3

Questo è completamente fuori luogo qui. L'OP sta chiedendo la cartella _user_ corrente, non la cartella di lavoro. – julealgon

12

È possibile ottenere il percorso ProfiloUtente con proprio questo:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

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

Dai un'occhiata ai commenti sulla domanda. Questo non è il caso per tutte le versioni di Windows. –

3

anche molto utile, mentre indaga la Environment.SpecialFolder enum. Utilizzare LINQPad o creare una soluzione ed eseguire questo codice:

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

Folder Paths

Questo è il risultato sulla mia macchina:

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 

Btw."fisch" sono le prime 5 lettere del mio cognome (ed è tedesco per "pesce"). Questo è il nome utente assegnato al momento dell'accesso con un account Microsoft.

+0

Non so come non ho mai sentito parlare di LINQPad, l'ho provato, questa cosa è fantastica, grazie per averlo consigliato. – TravisO

Problemi correlati