2013-05-25 13 views
5

sto usando C# .NET 4 con VS 2010.Come posso accedere alla cartella "Documenti e impostazioni"?

Quando l'iterazione di alcuni percorsi, sto correndo questa linea:

files = Directory.GetFiles(path, searchPattern); 

ottengo un'eccezione quando il percorso è i documenti e le impostazioni cartella. Come posso accedervi? E no, non voglio saltare la cartella con un tentativo e cattura. Voglio essere in grado di accedervi in ​​qualche modo.

Modifica: ho ricevuto una domanda di follow-up. Come ti ho detto, sto iterando sui percorsi. C'è un modo di usare Environment.GetFolderPath ma in qualche modo di identificare la cartella speical corretta in base al percorso che sto attualmente controllando?

risposta

4

devi usare come questo

var mydocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 

Per ottenere l'accesso alla cartella MyDocuments.

+0

ho modificato la mia domanda per aggiungere una domanda di follow-up se si può conoscere la risposta a quello. –

+0

si può benissimo equiparare il percorso che avete con questa 'Environment.GetFolderPath (...)' e se abbinato, è possibile continuare oppure semplicemente si può chiamare 'CONTINUE nel costrutto iterativo. – Saravanan

+0

Intendevo qualcosa automaticamente. qualcosa di simile (pseudo codice): cartella SpeicalFolder = Environment.GetSpeicalFolderByFullPath (percorso); –

4

Da Environment.SpecialFolder

Il sistema di cartelle speciali sono cartelle come Program Files, Programmi, sistema, o di avvio, che contengono informazioni comuni. Le cartelle speciali sono impostate di default dal sistema, o esplicitamente dall'utente , quando si installa una versione di Windows.

Il metodo GetFolderPath restituisce le posizioni associate a questo enumerazione . Le posizioni di queste cartelle possono avere valori diversi su diversi sistemi operativi, l'utente può modificare alcune delle posizioni e le posizioni sono localizzate.

Basta usare

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
files = Directory.GetFiles(path, searchPattern); 

nel mio computer, restituisce come C:\Users\Soner\Documents

C'è un modo per utilizzare Environment.GetFolderPath ma in qualche modo idetifying cartella speical corretto in base al percorso Sono attualmente in controllo ?

Dal SpecialFolder è tipo enum, è possibile scorrere i loro valori in un ciclo. Ecco come sembra;

public enum SpecialFolder 
{ 
    AdminTools = 0x30, 
    ApplicationData = 0x1a, 
    CDBurning = 0x3b, 
    CommonAdminTools = 0x2f, 
    CommonApplicationData = 0x23, 
    CommonDesktopDirectory = 0x19, 
    CommonDocuments = 0x2e, 
    CommonMusic = 0x35, 
    CommonOemLinks = 0x3a, 
    CommonPictures = 0x36, 
    CommonProgramFiles = 0x2b, 
    CommonProgramFilesX86 = 0x2c, 
    CommonPrograms = 0x17, 
    CommonStartMenu = 0x16, 
    CommonStartup = 0x18, 
    CommonTemplates = 0x2d, 
    CommonVideos = 0x37, 
    Cookies = 0x21, 
    Desktop = 0, 
    DesktopDirectory = 0x10, 
    Favorites = 6, 
    Fonts = 20, 
    History = 0x22, 
    InternetCache = 0x20, 
    LocalApplicationData = 0x1c, 
    LocalizedResources = 0x39, 
    MyComputer = 0x11, 
    MyDocuments = 5, 
    MyMusic = 13, 
    MyPictures = 0x27, 
    MyVideos = 14, 
    NetworkShortcuts = 0x13, 
    Personal = 5, 
    PrinterShortcuts = 0x1b, 
    ProgramFiles = 0x26, 
    ProgramFilesX86 = 0x2a, 
    Programs = 2, 
    Recent = 8, 
    Resources = 0x38, 
    SendTo = 9, 
    StartMenu = 11, 
    Startup = 7, 
    System = 0x25, 
    SystemX86 = 0x29, 
    Templates = 0x15, 
    UserProfile = 40, 
    Windows = 0x24 
} 
+0

Ho modificato la mia domanda per aggiungere una domanda di follow-up se si conosce anche la risposta. –

+0

@YonatanNir Aggiornato. –

+0

C'è un modo per farlo automaticamente? Qualcosa come (pseudo codice): cartella SpeicalFolder = Environment.GetSpeicalFolderByFullPath (path); Inoltre, c'è qualcosa che non capisco. Il percorso che ha generato ed eccezione è C: \\ Documents and Settings e il percorso che mi è stato assegnato dall'ambiente è C: \\ Users \\ Yonatan \\ Documents. Come posso confrontare i percorsi durante il runtime per sapere che il percorso che ha generato un'eccezione doveva effettivamente essere l'altro percorso speciale? Non posso fare solo se (path == "C: \\ Documents and Settings") poiché potrebbe cambiare tra diversi computer. –

0

È possibile impostare il programma in modo che sia possibile eseguire solo come amministratore.

In Visual Studio:

Fare clic destro sul Progetto -> Proprietà -> Sicurezza -> Abilita ClickOnce Security

Dopo aver cliccato, viene creato un file con le proprietà del progetto cartella chiamata app.manifesta una volta che questo è stato creato, è possibile deselezionare l'opzione attivare le impostazioni di ClickOnce di sicurezza

aprire il file e cambiare questa linea:

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

a:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Questo renderà il programma richiede all'amministratore privilegi e ti garantirà l'accesso a quella cartella.

+0

Che non ha funzionato –

Problemi correlati