Come posso ottenere la directory utente corrente?


100

Usando questo:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Ottengo questo output:

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

Come posso ottenere la directory principale di tutti gli utenti? cioè:

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

1
La risposta che ho finito per usare è stata cancellata ... funziona: Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData))
juan

2
Juan - non sempre funzionerà per te - questa volta sei stato fortunato.
Scott Ivey

perché? intendi come in vista? o in xp smetterà improvvisamente di funzionare?
juan

5
vedere il commento di Scott sulla risposta di Jay Riggs. Su W7 e Vista, la cartella Application Data si trova in una posizione diversa, quindi dovresti salire di 2 directory, invece di 1.
Thomas

Risposte:


48

Potrebbe essere questa una buona soluzione: tenendo conto se si tratta di Vista / Win7 o XP e senza utilizzare variabili d'ambiente:

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

Sebbene l'utilizzo della variabile d'ambiente sia molto più chiaro.


165

Provare:

System.Environment.GetEnvironmentVariable("USERPROFILE");

Modificare:

Se la versione di .NET che stai utilizzando è 4 o superiore, puoi utilizzare l' Environment.SpecialFolderenumerazione:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

16
È davvero una cattiva idea dipendere dalle variabili di ambiente per darti i percorsi delle cartelle. Ci sono troppi modi in cui queste variabili d'ambiente possono essere modificate. Il modo consigliato è con l'enumerazione Environment.SpecialFolder.
Jim Mischel,

1
Sfortunatamente, come puoi vedere msdn.microsoft.com/en-us/library/… la cartella USERPROFILE non è contenuta in quell'enumerazione.
Thomas,

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

@JimMischel Ma non sono presumibilmente modificabili? E se fai sempre riferimento alla variabile d'ambiente, stai bene.
Nate-Wilkins

22

Puoi ottenere il percorso UserProfile semplicemente con questo:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);


11

Anche molto utile, mentre indagava Environment.SpecialFoldersull'enumerazione. Usa LINQPad o crea una soluzione ed esegui 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())

Percorsi delle cartelle

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 

("fisch" sono le prime 5 lettere del mio cognome. Questo è il nome utente assegnato quando si accede con un account Microsoft.)


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

4
Environment.GetEnvironmentVariable("userprofile")

Il tentativo di risalire da una SpecialFolder denominata è soggetto a problemi. Ci sono molti motivi per cui le cartelle non saranno dove ti aspetti: gli utenti possono spostarle da sole, l'oggetto Criteri di gruppo può spostarle, il reindirizzamento delle cartelle ai percorsi UNC, ecc.

L'utilizzo della variabile di ambiente per il profilo utente dovrebbe riflettere uno qualsiasi di questi possibili problemi.


3

Provare:

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

1
Questo non funzionerà su Windows 7 e presumo non funzionerà nemmeno su Vista se ricordo bene la struttura delle cartelle. Il 7, dovresti salire di 2 cartelle principali poiché la cartella ApplicationData è \% userprofile% \ AppData \ Roaming \
Scott Ivey

Restituisce "C: \ Users \ Fredrik \ AppData" sul mio computer Vista (la cartella ApplicationData è "C: \ Users \ Fredrik \ AppData \ Roaming")
Fredrik Mörk


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

Dai un'occhiata ai commenti sulla domanda. Questo non è il caso di tutte le versioni di Windows.
Wai Ha Lee

-3

puoi usare 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 vedere: Ottieni il percorso della directory corrente sia in WinXP che in WinCE con C #


3
Questo è completamente fuori luogo qui. L'OP richiede la cartella utente corrente , non la cartella di lavoro.
julealgon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.