Système.UnauthorizedAccessException lors de la création d'un fichier
J'étais en train d'écrire un code pour que je puisse consigner les messages d'erreur. Je suis en train de nommer le fichier avec la date et souhaitez créer un nouveau fichier journal pour chaque jour. Après un peu de regarder autour, je suis venu avec le code suivant...
class ErrorLog
{
public void WriteErrorToFile(string error)
{
//http://msdn.microsoft.com/en-us/library/aa326721.aspx refer for more info
string fileName = DateTime.Now.ToString("dd-MM-yy", DateTimeFormatInfo.InvariantInfo);
//@ symbol helps to ignore that escape sequence thing
string filePath = @"c:\users\MyName\mydocuments\visual studio 2012\projects\training\" +
@"discussionboard\ErrorLog\" + fileName + ".txt";
if (File.Exists(filePath))
{
//File.SetAttributes(filePath, FileAttributes.Normal);
File.WriteAllText(filePath, error);
}
else
{
Directory.CreateDirectory(filePath);
//File.SetAttributes(filePath, FileAttributes.Normal)
//Throws unauthorized access exception
RemoveReadOnlyAccess(filePath);
File.WriteAllText(filePath, error);
}
}
public static void RemoveReadOnlyAccess(string pathToFile)
{
FileInfo myFileInfo = new FileInfo(pathToFile);
myFileInfo.IsReadOnly = false;
myFileInfo.Refresh();
}
/*Exception thrown:
* UnAuthorizedAccessException was unhandled.
* Access to the path 'c:\users\anish\mydocuments\visual studio 2012\
* projects\training\discussionboard\ErrorLog13.txt' is denied.
*/
}
J'ai trouvé un forum qui a discuté sur un problème similaire, mais en utilisant
Fichier.SetAttrributes(filePath, FileAttributes.Normale) n'ont pas d'aide ni la RemoveReadOnlyAccess (inclus dans le code ci-dessus). Lorsque je vérifie les propriétés du dossier, il a lu seulement marqué mais même lorsque je coche qu'il revient de nouveau. J'ai vérifié les autorisations sur le dossier et à l'exception de l'autorisation spéciale, dont je n'étais pas capable de changer, tout est permis.
Toute suggestion sur la façon dont je dois procéder serait appréciée.
Pourquoi l'accès au chemin d'accès refusé? le lien discute sur un problème similaire, mais je n'ai pas pu obtenir mon truc travailler avec une liste de suggestions.
Merci de prendre le temps de regarder cela.
Cette est une partie d'une application windows form. J'ai l'intention d'appeler cette méthode dans tous mes blocs catch. Concernant les droits de l'utilisateur, si il n'avait pas les droits ne devrait-elle pas de ne pas pouvoir créer un dossier. Il a créé un dossier du nom de "Journal" à l'emplacement spécifié. Merci.
OriginalL'auteur NoSaidTheCompiler | 2013-04-12
Vous devez vous connecter pour publier un commentaire.
Votre chemin est étrange : "Mes documents" répertoire doit être "C:\Users\MyName\Documents\"
Vous pouvez utiliser de l'Environnement afin de corriger facilement :
Noter qu'il aura acces au dossier "Mes documents" de l'utilisateur qui exécute votre exe.
Deuxième erreur, CreateDirectory doit avoir un chemin d'accès en argument, et non un fichier. en utilisant comme vous le faites créera un sous-répertoire avec le nom de fichier. Donc vous ne pouvez pas créer un fichier avec ce nom !
Essayez ceci :
une autre erreur détectée 😉 Essayer ma solution
J'ai essayé ce que vous avez dit et qui fait sens pour moi, mais toujours la même erreur. Aussi, j'ai d'abord eu mes dates converti en chaîne de "dd/mm/yy" et le "/" n'est pas autorisé dans le nom de fichier donc j'ai pensé que peut-être le problème, je l'ai changé pour "mm-jj-aa" mais cela n'a pas aide non plus. Une idée de comment aurais-je aller sur la façon de vérifier/modifier les autorisations de l'utilisateur compte que je suis à l'aide?
Il a travaillé! Merci beaucoup, vous êtes génial :). Me semble que le problème a été quelque part avec le chemin que j'ai utilisé, lorsque je l'ai changé pour la manière dont vous avez fait l'Environnement.GetFolderPath... il a travaillé! Apprécié! 🙂 Dommage que je ne peut pas voter votre réponse en ce moment parce que ma réputation 🙁
Vous devez marquer elle a acceptée que si elle résolu votre problème.
OriginalL'auteur Xaruth
Quelques raisons possibles:
La première situation pourrait être résolu par une vérification en vertu de ce qui compte le processus est en marche et vérifier que le compte dispose des droits appropriés.
L'autre situation peut être résolu en vérifiant si un autre processus est le verrouillage du fichier (par exemple, utiliser des outils comme 'WhosLocking" ou "ProcessExplorer'
OriginalL'auteur Zdeslav Vojkovic
J'ai eu à exécuter mon application en tant qu'administrateur afin d'écrire protégés dossiers dans c:. Par exemple, si le débogage de votre application dans visual studio assurez-vous de cliquer à droite sur "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" et choisissez "Exécuter en tant Qu'Administrateur". Ensuite, ouvrez votre solution à partir de là. Mon application a été d'essayer d'écrire à la racine de c:\
OriginalL'auteur goku_da_master