J'ai un problème où j'essaye de supprimer mon fichier mais j'obtiens une exception.
if (result == "Success")
{
if (FileUpload.HasFile)
{
try
{
File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
string filename = Path.GetFileName(btnFileUpload.FileName);
btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
}
catch (Exception ex)
{
Message(ex.ToString());
}
}
}
Je dois également noter que le dossier que j'essaie de supprimer a un contrôle total sur les services réseau.
Le message d'exception complet est:
System.UnauthorizedAccessException: l'accès au chemin d'accès «C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ temp_loginimages \ enviromental.jpg» est refusé. à System.IO .__ Error.WinIOError (Int32 errorCode, String peut-êtreFullPath) à System.IO.File.Delete (chemin de chaîne) à hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (expéditeur de l'objet, EventArgs e) dans C: \ Users \ gowdyn \ gowdyn Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs: ligne 242
Des idées?
la source
Réponses:
Selon la méthode File.Delete ...
Un
UnauthorizedAccessException
signifie l'une des 4 choses suivantes:la source
Path is a directory.
merci pour cette astuce :) Cela m'a aidé.J'ai aussi eu le problème, donc je suis tombé sur ce post. J'ai ajouté la ligne de code suivante avant et après une copie / suppression.
Supprimer
Copie
la source
C'est un vieux problème, mais je l'ai rencontré lors de la recherche. Il s'avère que je manquais le composant de nom de fichier réel dans le chemin de sauvegarde pour SaveAs ...
la source
Lorsqu'un utilisateur tente de se connecter à votre site Web, IIS attribue la connexion au compte IUSER_ComputerName , où ComputerName est le nom du serveur sur lequel IIS s'exécute. Par défaut, le compte IUSER_ComputerName est membre du groupe Invités. Ce groupe a des restrictions de sécurité. Essayez d'accéder à ce dossier à IUSER_ComputerName
Voici une très bonne réponse décrite sur la sécurité IIS
J'espère que cela t'aides
la source
Faites un clic droit sur Visual studio et cliquez sur Exécuter en tant qu'administrateur
la source
J'ai eu l'erreur parce que je ne savais pas que la destination devait être un fichier. J'avais un dossier comme deuxième paramètre (qui fonctionne dans cmd). et j'ai obtenu
Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.
parce que C #File.Move
veut un fichier là-bas, pas seulement pour le premier paramètre, mais aussi pour le second, et donc si vous mettez un répertoire comme deuxième paramètre, il essaie d'écrire un fichier commec:\crp
lorsque vous avez un répertoire appeléc:\crp
.ce serait incorrect
File.Move(args[0],"c:\\crp");
Donc, ce serait correct
File.Move(args[0],"c:\\crp\\a.a");
Il en va de même
File.Copy
la source
S'il s'agit d'un site Web IIS qui rencontre le problème, vérifiez la propriété Identity des paramètres avancés du pool d'applications que le site ou l'application utilise. Vous pouvez trouver qu'il est défini sur ApplicationPoolIdentity, et dans ce cas, c'est l'utilisateur qui devra avoir accès au chemin.
Ou vous pouvez utiliser le style ancien et définir simplement l'identité sur le service réseau et donner à l'utilisateur du service réseau l'accès au chemin.
la source
Vous devez modifier les privilèges du dossier dans lequel vous essayez de supprimer / enregistrer. Cliquez avec le bouton droit sur le dossier contenant et utilisez l'onglet Sécurité pour autoriser les droits de modification de l'utilisateur sous lequel votre application s'exécute.
la source
J'ai frappé la même chose. Vérifiez que le fichier n'est PAS CACHÉ.
la source
J'ai également rencontré ce problème lorsque mon service de fenêtre a commencé à lever l'exception
Donc, comme solution, j'ai vérifié le compte utilisateur associé à mon service, comme indiqué dans la capture d'écran ci-dessous
Donc, dans mon cas, c'était SERVICE RÉSEAU
Et puis est allé dans les propriétés du dossier pour vérifier si le compte d'utilisateur associé existe également sous leur onglet d'autorisation. Il manquait dans mon cas et quand je l'ai ajouté et cela a résolu mon problème.
Pour plus d'informations, veuillez consulter la capture d'écran ci-dessous
la source
même problème pour moi aussi, je pointais le dossier au lieu du fichier.
alors assurez-vous que dans chemin, donnez chemin + nom de fichier
la source
Vérifiez les propriétés de vos fichiers. Si la lecture seule est cochée, décochez-la. C'était mon problème personnel avec l'exception UnauthorizedAccessException.
la source
J'ai eu cette erreur et je l'ai résolue en un instant. Je ne sais pas pourquoi tous mes dossiers sont en lecture seule , J'ai annulé la lecture seule et je l'applique. Cependant, il est toujours en lecture seule. J'ai donc déplacé le fichier dans le dossier racine, cela fonctionne - tellement bizarre.
la source
Une exception UnauthorizedAccessException est levée lorsque le système d'exploitation refuse l'accès en raison d'une erreur d'E / S ou d'une erreur de sécurité.
Si vous essayez d'accéder à un fichier ou à une clé de registre, assurez-vous qu'il n'est pas en lecture seule .
la source
Si vous utilisez BitDefender, il y a de fortes chances que sa fonction Safe Files bloque votre opération. Il s'agit d'une forme de protection contre les ransomwares fournie avec certaines de ses versions les plus avancées.
Assurez-vous d'accorder à votre application l'accès dans BitDefender et réessayez.
Vous trouverez plus de détails sur cette page de support BitDefender .
la source
J'ai eu le même problème sur un site Web récemment déplacé sur un serveur partagé. Résolu par le biais du panneau de l'hôte Web (DotNetPanel) définissant la valeur "Autoriser les autorisations d'écriture". Donc, si vous êtes sur un serveur partagé avant de passer en revue tout le code, il vaut la peine de jeter un coup d'œil à la configuration du serveur et cela pourrait vous faire gagner beaucoup de temps.
la source
Sachez que si vous essayez d'atteindre un chemin de dossier partagé à partir de votre code, vous n'avez pas seulement besoin de donner les autorisations appropriées au dossier physique via l'onglet de sécurité. Vous devez également «partager» le dossier avec l'utilisateur du pool d'applications correspondant via l'onglet Partager
la source
J'étais confronté à cette erreur car
Parfois, lorsque je
Combine
le chemin avec le nom de fichier etFileName = ""
Ce
Path Directory
n'est pas devenufile
un problème comme mentionné ci-dessusdonc vous devez vérifier
FileName
comme çala source
J'ai eu l'erreur exacte lors de la suppression d'un fichier. Il s'agissait d'un service Windows exécuté sous un compte de service qui ne pouvait pas supprimer un document .pdf d'un dossier partagé même s'il avait le contrôle total du dossier.
Ce qui a fonctionné pour moi était de naviguer vers l'onglet Sécurité du dossier partagé> Avancé> Partager> Ajouter.
J'ai ensuite ajouté le compte de service au groupe des administrateurs, appliqué les modifications et le compte de service a ensuite pu effectuer toutes les opérations sur tous les fichiers de ce dossier.
la source
Pour ceux qui essaient de créer une application UWP (Universal Windows), les autorisations sur les fichiers sont beaucoup plus restreintes et sont généralement refusées par défaut. Il remplace également les autorisations des utilisateurs système. En gros, vous n'aurez accès qu'aux fichiers dans l'un ou l'autre
Vous pouvez en savoir plus ici pour plus de détails => https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions
la source
Dans mon cas, le problème était Norton. Mon programme interne n'a pas la signature numérique appropriée et lorsqu'il a essayé de supprimer un fichier, il a donné l'exception UnauthorizedAccessException.
S'il vous donne une notification, vous pouvez le gérer à partir de là. Dans mon cas, il n'a pas donné de notification que j'ai remarquée. Alors, voici comment empêcher Norton de bloquer le programme.
la source
J'ai aussi rencontré le même problème en essayant de le faire après le déploiement sur le serveur:
J'ai accordé l'autorisation dans IIS à un autre groupe, y compris l'administrateur, et mon problème a été résolu.
la source
J'ai trouvé que cette erreur peut se produire en MODE CONCEPTION par opposition à? mode d'exécution ... Si vous faites quelque chose comme la création d'un membre de classe qui nécessite l'accès à un fichier .INI ou .HTM (fichier de configuration, fichier d'aide), vous voudrez peut-être NE PAS initialiser l'élément dans la déclaration, mais l'initialiser plus tard dans FORM_Load () etc ... Lorsque vous initialisez ... Utilisez une instruction IF de garde:
Cela empêchera le concepteur MSVS d'essayer de créer un fichier INI ou HTM lorsque vous êtes en mode conception.
la source
J'ai eu cette erreur lorsque j'ai essayé de renommer un dossier très rapidement après qu'il ait été déplacé ou créé.
Un simple l'a
System.Threading.Thread.Sleep(500);
résolu:la source
Dans mon cas particulier, je créais et supprimais à plusieurs reprises 10000 dossiers. Il me semble que le problème résidait dans le fait que, bien que la méthode
Directory.Delete(path, true)
retourne, le mécanisme du système d'exploitation sous-jacent peut toujours supprimer les fichiers du disque. Et lorsque je commence à créer de nouveaux dossiers immédiatement après la suppression des anciens, certains d'entre eux sont toujours verrouillés car ils ne sont pas encore complètement supprimés. Et j'obtiens System.UnauthorizedAccessException: "L'accès au chemin est refusé".Utiliser
Thread.Sleep(5000)
aprèsDirectory.Delete(path, true)
résout ce problème. Je suis tout à fait d'accord que ce n'est pas sûr et je n'encourage personne à l'utiliser. J'aimerais ici une meilleure approche pour résoudre ce problème afin d'améliorer ma réponse. Maintenant, je donne juste une idée pourquoi cette exception peut se produire.la source
Tout d'abord, vérifiez simplement le chemin si le caractère deux-points (:) est manquant ou non après la lettre du lecteur. Si deux points ne sont pas manquants, vous pouvez vérifier si l'autorisation d'accès / d'écriture est accordée pour ce chemin. J'ai eu le même problème et il ne me manquait que le colon, la permission et tout le reste allait bien.
fonctionnera bien mais,
vous donnera une erreur de refus d'accès.
la source
J'essayais d'utiliser System.IO.File.OpenWrite (chemin)
et cela n'a pas fonctionné parce que je ne faisais que passer à OpenWrite () un chemin vers un répertoire, mais cela nécessite un chemin jusqu'au fichier que vous voulez écrire. Ainsi, un chemin complet comprenant le nom de fichier.extension à la fin doit être passé dans OpenWrite pour éviter UnauthorizedAccessException
la source
J'ai également rencontré ce post comme traitant du même problème. Il semble que le fichier est en cours d'utilisation et ne peut donc pas y écrire. Bien que incapable de le comprendre, quel processus l'utilise. Déconnecté l'autre utilisateur qui était connecté dans cette boîte, ne voyez aucun utilisateur qui le détient. Des conseils rapides sur la façon de trouver la même chose.
Merci, Lakshay (développeur)
la source
Pour résoudre ce problème, je suis l'approche Scot Hanselman dans l'article Debugging System.UnauthorizedAccessException (souvent suivi de: L'accès au chemin est refusé) , le code avec l'exemple est ci-dessous:
la source