Mon programme d'application de la console crée des fichiers d'exécution lorsqu'il fonctionne donc ce que je veux faire est de supprimer tous ces fichiers sur le démarrage de l'application. J'ai essayé ceci: ... Juste pour rechercher tous les fichiers / dossiers du chemin donné (qui se trouve dans un sous-répertoire dans le chemin d'exécution du programme), puis supprimez-les. Cependant, je reçois l'exception suivante: p> accès au chemin "fichier" est refusé. P>
blockQuote> J'ai essayé d'exécuter le programme en tant qu'administrateur sans chance; Cependant, je veux une solution qui fonctionne sans utiliser de privilèges d'administrateur. P> Notes: P>
5 Réponses :
Utilisation de Windows API MoveFileEx peut être une solution potentielle avec un paramètre mobilefile_delay_until_reboot pour supprimer le fichier seulement après le redémarrage. p>
Veuillez vérifier http: // msdn. Microsoft.com/en-us/Library/AA365240%28V=VS.85%29.aspx . P>
Finalement, le moyen le plus simple serait d'appeler le code natif, de C #. Une recherche rapide montre un bel exemple qui vous encouragera certainement: Stackoverflow.com/Questtions/6077869/...
Essayez d'utiliser le Microsoft.visualbase.fileio.filesystem Code> car il a une méthode pratique deleteDirectory code>, j'ai eu accès aux problèmes il y a quelque temps et c'était la solution pour mon problème . var directory = new DirectoryInfo(targetDir);
if (directory.Exists)
{
Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(targetDir, Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents);
}
EHM est-ce qu'il existe dans .NET 2?
D'abord, je pense que c'est un code de base visuel aussi, je ne trouve pas cela dans .NET 2
MSDN.MicRosoft .com / fr-nous / bibliothèque / ...
Vous devrez ajouter la référence microsoft.visualbasic code>
Vous dites que les fichiers ne sont pas ouverts dans une autre application, mais il doit être ouvert dans votre application: Assurez-vous de disposer du flux de fichiers lorsque vous créez le fichier P. > //Create some directories to delete
Directory.CreateDirectory("C:/Temp/DeleteMe");
Directory.CreateDirectory("C:/Temp/DeleteMe/DeleteMe");
using (File.Create("C:/Temp/DeleteMe/DeleteMeFile")) { }
//Delete the files
var directory = new DirectoryInfo("C:/Temp/DeleteMe");
if (!directory.Exists) return;
foreach (FileInfo file in directory.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in directory.GetDirectories())
{
dir.Delete(true);
}
J'ai reçu cette erreur et j'ai constaté que c'était parce que mes fichiers de test étaient réadis. Changé ceci et je peux maintenant utiliser FileInfo pour les supprimer sans soucis. P>
if (File.Exists(filePath))
{
File.SetAttributes(filePath, FileAttributes.Normal);
File.Delete(filePath);
}
Bien que cela puisse répondre à la question, veuillez également ajouter une courte explication de votre code et pourquoi il résout le problème initial.
Un doute: vous supprimez vraiment tous les fichiers du chemin de candidature?
Je veux juste dire que parce que votre programme est également un fichier.
OFC Non, les fichiers que je supprime sont dans un sous-répertoire situé dans le chemin de l'application.
Quelle est la valeur réelle que le message d'erreur donne? Vous avez substitué
'fichier' code> là ..Oui, voir lequel est plaint, qui devrait être facile à tracer - il pourrait y avoir quelques choses. Essayez également de supprimer ce fichier manuellement, etc. Vous avez un cas très clair pour le débogage
Chargez-vous des dll ou utilisez des flux?
Il est supprimé manuellement sans probs.
Juste une hypothèse, pouvez-vous créer une liste de fichiers en dehors de la parcours et de la boucle?
@Vladl: Je n'obtiens pas ce que tu veux dire.
FichierInfo [] fi = répertoire.getfiles (); foreach (var fichier in fi) fichier.delete (); et même pour le répertoire. Peut-être que l'énumarator provoque le problème
@Vladl: Exception ne concerne pas les collections, c'est / o
@Xaqron vraiment? : D En fait, ce que je suppose, c'est que GetFiles () renvoie iEnumerable, créé par retour donné, ce qui pourrait causer des problèmes si un ou plusieurs fichiers sont manquants après la première sortie
@Vladl vous envisagez de "InvalidOperationException - la collection a été modifiée" mais dans ce cas, il existe un "accès refusé"
Réponse alternative: Stackoverflow.com/a/648055/3543437
Duplicailler possible de Comment puis-je supprimer un Répertoire avec des fichiers en lecture seule en C #?