2012-05-18 10 views
8

So che c'è già un sacco di cose su questo e ho provato alcune cose ma non ho avuto fortuna nel risolverlo.L'accesso al percorso **** è negato

Ho un programma C# che ha creato un documento XML e sto cercando di salvarlo in una cartella presente in MyDocuments. Sto ottenendo l'eccezione di folliwing quando si chiama la funzione XMLDoc.Save.

Accesso al percorso 'C: \ Users \ Ash \ Documents \ ConfigOutput' è negato

ho Visual Studio in esecuzione come amministratore. Qualche idea su come risolverlo?

Ho provato a salvare sul desktop e nella cartella C: \ anche.

Sto usando Windows 7.

in corso l'eseguibile incorporato anche doesnt sembrano funzionare.

Scusa ragazzi sembra che stavo facendo lo stupido. Non avevo davvero aggiunto un nome di file al percorso di output. Non cancellerò la domanda nel caso in cui qualcun altro venga fatto da questo gotcha! Grazie per tutto l'aiuto/i commenti.

+0

hai provato salvandolo nella directory principale C o di un altro cartella? Potrebbe essere un problema con UAC e permessi sulle cartelle degli utenti - è su Win7 o Vista? – Charleh

+0

Prova a eseguire l'app come amministratore piuttosto che visual studio. –

+1

quale nome del file stai specificando? – Richard

risposta

9

Ci sono alcune possibilità:

  • ConfigOutput è una cartella
  • ConfigOutput è un file che è in uso (aperto)
  • Non è stato effettuato l'accesso come utente "Cenere"

Normalmente non è necessario eseguire come amministratore per scrivere nella propria cartella Documenti.

+5

L'output di configurazione era una cartella ..... ooops! – user589195

+1

Nel mio caso, il file è stato letto solo. – toddmo

1

Prova a eseguire l'app come amministratore.

Se si desidera eseguire il debug della propria app, avviare Visual Studio come amministratore.

Per forzare inizio app come amministratore di dare un'occhiata a questa discussione: How do I force my .NET application to run as administrator?

P.S. Verifica se il tuo file non è già aperto da un altro FileStream o altro.

1

Non so se questo fa la differenza, ma potresti voler specificare la cartella in modo relativo piuttosto che assoluto: Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) ti fornirà il percorso dei documenti dell'utente corrente. Controlla se è diverso da quello che fornisci.

In tal caso, potrebbe essere necessario eseguire l'applicazione con un altro utente o amministratore come altri hanno sottolineato. Ovviamente a un utente non è permesso solo salvare i file nella cartella dei documenti di un altro utente.

Per quanto mi riguarda quando eseguo il debug della mia app da Visual Studio, la cartella dei documenti è la stessa dell'utente al quale sono attualmente connesso e che esegue Visual Studio sotto.

Si potrebbe provare prima <requestedExecutionLevel level="asInvoker" uiAccess="true|false"/> e passare progressivamente a highestAvailable e requireAdministrator.

In alternativa, chiedere i permessi, intercettare l'eccezione e stamparlo:

try { 
     FileIOPermission fileIOPermission = new FileIOPermission(FileIOPermissionAccess.AllAccess, myDocFolderFile); 
     fileIOPermission.Demand(); 
    } catch (SecurityException se) { 
     Debug.WriteLine(se.ToString()); 
    } 
4

è necessario controllare e ottenere il permesso di quella directory/depositare la scrittura .. per quel uso Security namesapce

var permissionSet = new PermissionSet(PermissionState.None);  
var writePermission = new FileIOPermission(FileIOPermissionAccess.Write, pathToFolder); 
permissionSet.AddPermission(writePermission); 

if (permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet)) 
{ 
    // do your stuff 
} 
else 
{ 
    // alternative stuff 
} 
2

Sembra che tu non sei specificare un nome di file e quindi non è possibile creare un file con lo stesso nome di una directory esistente - in modo da provare a cambiare il tuo percorso di:

C: \ Users \ Ash \ Documenti \ ConfigOutput \ out.xml

Problemi correlati