2010-02-11 9 views
2

J'ai un fichier que je veux fermer le fichier par programme qui est utilisé par un autre processus.Je veux fermer un fichier

La chose est que je veux libérer le fichier à partir d'un autre processus selon utilise cela et puis le supprimer .. De toute façon de le faire par programme? J'utilise C# ..

comment supprimer ce ??

je l'ai fait un code comme,

si (File.Exists (filePath)) File.Delete (filePath);

pour supprimer le fichier

+0

connexes: http://stackoverflow.com/questions/1977611/is-it-possible-to-bypass-a-file-lock-in-c-when-another-thread-process-is- inutile –

Répondre

4

Cela dépend du processus. Vous n'avez pas nécessairement les droits d'arrêter l'autre processus en utilisant le fichier, et il pourrait être potentiellement dangereux.

Vous pouvez envisager d'utiliser http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx mettre fin au processus une fois que vous savez qu'il est poignée (Utilisez P/Invoke pour y accéder à partir de C#)

Edit: Voir aussi la question suivante pour aider determind la poignée du processus de verrouillage de votre fichier, Using C#, how does one figure out what process locked a file?

2

Essayez this.

Bien que je ne recommanderais pas les poignées de fermeture d'autres processus, sauf si vous savez vraiment les conséquences de le faire!

3

Je ne suis pas sûr que ce soit une bonne idée ... Cela dépend de ce que l'application « autre » est en train de faire avec le dossier et si elle aurait un impact sur le système ou la stabilité/intégrité des données. Cela dit, vous pourriez obtenir la fonctionnalité dont vous avez besoin en envoyant un message à Sysinternals Handle pour obtenir l'identité de l'autre programme et le forcer à libérer le fichier par tous les moyens nécessaires.

Mon option préférée, cependant, serait d'aller dans une boucle d'attente jusqu'à ce que le fichier a été libéré par l'autre application, puis retirez-le. C'est juste moi, cependant. Cette idée est encore plus compliquée si le fichier en question est sur un partage réseau - dans ce cas, vous ne savez pas quel processus verrouille le fichier comme il pourrait ne pas être sur votre machine. (En fait, je ne suis pas sûr de la façon dont les différents types de fichiers verrouillent les fichiers en cours d'utilisation - plus de complication;)

1

Vous ne pouvez pas avoir le droit de le faire et de toute façon vous obtiendrez une exception levée à la suite par votre exemple de code. Par programmation, sous C#, il y aurait beaucoup de pinvokes pour acquérir des informations de sécurité et permettre à votre programme de glisser le fichier d'un autre processus, en utilisant l'injection de processus pour soulever les propres doigts morts du processus - Pourquoi? Souhaitez-vous faire cela à un autre processus de toute façon?

C'est très suspect si vous ne me dites pas ... Vous pourriez causer une corruption de programme dans ce processus (il pourrait être l'utiliser pour leur propre raison) et si vous avez essayé, ce processus échouera parce que cette ressource n'est plus là ...

Espérons que cela aide, Cordialement, Tom.

0

Si votre fichier est un fichier texte, vous n'avez pas besoin de supprimer votre fichier (c'est une mauvaise idée de quitter un processus de votre code), vous pouvez plutôt rendre votre fichier texte vide.

if (File.Exists(filePath)){ 
    File.WriteAllText(filePath, String.Empty); 
} 
Questions connexes