web-dev-qa-db-fra.com

L'accès au chemin est refusé

Je sais que cette question a été posée à plusieurs reprises ici, mais je ne trouve pas de solution à mon problème. J'essaye d'enregistrer l'image dans le dossier en .net c # mais j'obtiens cette exception:

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

J'ai donné le contrôle total à ce dossier (savehere) à network service et iis_iusrs, j'ai même donné le contrôle total à everyone mais j'obtiens toujours cette exception. J'ai essayé de donner l'accès via Explorer et via IIS manager, toujours pas de chance

Je le fais sur Windows Server 2008 R2 et IIS 7.5, à qui dois-je donner l'accès?

Merci

136
Burjua

Dans le pool d'applications du site Web, vous devez connaître l'identité sous laquelle il est exécuté (par défaut, il s'agit de Application Pool Identity) et lui accorder les autorisations appropriées.

84
Oded

L'accès au chemin 'C:\inetpub\wwwroot\mysite\images\savehere' est refusé

Lisez le message attentivement. Vous essayez de sauvegarder dans un fichier qui porte le même nom que le répertoire. Cela ne peut pas fonctionner, vous ne pouvez pas écraser un répertoire rempli de fichiers avec un seul nouveau fichier. Cela causerait des pertes de données indiscutables. "L'accès au chemin est refusé" est le système de fichiers qui se bat pour empêcher que cela ne se produise. 

Le message d’exception n’est pas idéal, mais il vient tout droit de l’OS et ils sont immuables. La structure ajoute souvent des contrôles supplémentaires pour générer de meilleurs messages, mais il s’agit d’un test coûteux sur un réseau. Perf est une fonctionnalité aussi. 

Vous devez utiliser un nom tel que 'C:\inetpub\wwwroot\mysite\images\savehere\mumble.jpg'. Considérez Path.Combine () pour générer de manière fiable le nom du chemin.

187
Hans Passant

J'avais le même problème en essayant de créer un fichier sur le serveur (en fait un fichier qui est une copie d'un modèle).

Voici le message d'erreur complet:

{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.

J'ai ajouté un nouveau dossier appelé Templates dans le dossier de l'application IIS. Une chose très importante dans mon cas est que je devais donner l'autorisation d'écriture (Gravar) à l'utilisateur IUSR sur ce dossier. Vous devrez peut-être aussi donner à Network Service et à ASP.NET v$.# la même permission d'écriture.

enter image description here

Après cela, tout fonctionne comme prévu.

19
Leniel Maccaferri

J'ai eu exactement le même problème.

La solution était que le fichier auquel j'essayais d'accéder était en lecture seule , car il avait été copié à partir d'un fichier modèle en lecture seule.

<facepalm />

11
Ruskin

J'ai eu ce problème lorsque j'essaie d'enregistrer le fichier sans définir le nom du fichier.

Ancien code

File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));

Code de travail

File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));
7
MarceloBarbosa

Mon problème était que je devais demander un accès en lecture seulement:

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);
5
jesal

veuillez ajouter l’autorisation de contrôle total IIS_IUSERS à votre dossier . vous trouvez cette option dans l’onglet Sécurité des propriétés du dossier . find this option and user in this image

5
Ali Rasouli

Le conseil suivant n'est pas une réponse à la question initiale de ce fil, mais pourrait aider d'autres utilisateurs qui se retrouvent sur cette page Web, après avoir commis la même erreur stupide que je viens de faire ...

J'essayais d'obtenir un contrôle ASP.Net FileUpload pour télécharger son fichier vers une adresse réseau qui contenait un "masqué partage", à savoir:

\ MyNetworkServer\c $\SomeDirectoryOrOther

Je n'ai pas compris. Si je courais la page Web en mode débogage dans Visual Studio, cela fonctionnerait bien. Mais lorsque le projet a été déployé et s’exécutait via un utilisateur du pool d’applications, celui-ci a refusé de rechercher ce répertoire réseau.

J'avais vérifié sous quel utilisateur mon site IIS était en cours d'exécution et lui avait donné toutes les autorisations nécessaires pour accéder à ce répertoire sur le serveur "MyNetworkServer", etc., mais rien ne fonctionnait.

La raison (bien sûr!) Est que seuls les administrateurs peuvent "voir" ces partages de lecteurs cachés. 

Ma solution était simplement de créer un partage "normal" pour

\ MyNetworkServer\SomeDirectoryOrOther

et cela s'est débarrassé de l'erreur "L'accès au chemin ... est refusé". FileUpload a réussi à exécuter la commande

fileUpload.SaveAs(networkFilename);

J'espère que cela aidera d'autres utilisateurs qui commettent la même erreur que moi!

Notez également que si vous téléchargez des fichiers volumineux (plus de 4 Mo), IIS7 exige que vous modifiiez le fichier web.config à deux emplacements. Cliquez sur ce lien pour lire ce que vous devez faire: Télécharger des fichiers volumineux dans ASP.Net

4
Mike Gledhill

J'ai résolu avec ce paramètre:

IIS> Pools d'applications> [votre site]> Paramètres avancés ...> Identité> Compte intégré> LocalSystem

Quelle est l’identité de votre pool d’applications pour l’application Web en cours d’exécution, essayez de créer un nouveau pool d’applications avec l’identité Service réseau, puis faites en sorte que votre application Web utilise le nouveau pool d’applications que vous avez créé et voyez si l’erreur persiste. 

4
kd7
  1. Changez le paramètre de compte intégré à compte personnalisé et entrez le nom d'utilisateur et le mot de passe de l'autre serveur.

  2. Conservez le réglage comme intégré (au lieu du mode classique).

2
uday

Mon problème était quelque chose comme ça:

FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);

mais au lieu d'utiliser path, je devrais utiliser File.FullName ... Je ne sais pas si cela va aider quelqu'un d'autre, simplement pour transmettre ma propre expérience avec cet erro!

2
Tarcísio Luna

Peut-être que ça vous aidera.

string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.Zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);
1
umutcakar

Avait un répertoire du même nom que le fichier que j'essayais d'écrire, afin que les gens puissent le rechercher aussi.

0
Samuel

J'ai eu le même problème, mais je l'ai corrigé en enregistrant le fichier dans un emplacement différent, puis en le copiant et en le collant à l'emplacement où je le voulais. J'ai utilisé l'option pour remplacer le fichier existant et cela a fonctionné pour moi. Je sais que ce n’est pas le moyen le plus efficace, mais cela fonctionne et prend moins de 15 secondes.

0
Nde Samuel Mbah

J'ai rencontré ce problème lors du développement sur mon poste de travail local.

Après plusieurs invocations iisreset infructueuses, j'ai résolu le problème en redémarrant ma machine.

Rétrospectivement, un descripteur de fichier ouvert peut être à l'origine de problèmes.

0
Jim G.

Dans mon cas, j'ai dû ajouter une règle d'autorisation .NET pour le site Web dans IIS.

J'ai ajouté une règle pour autoriser les utilisateurs anonymes.

 .NET Authorization Rules

0
GerardBeckerleg

Faire un répertoire savehere être un répertoire virtuel et donner l’autorisation de lecture/écriture à partir du panneau de configuration

0
Harsh Baid