Empêcher un utilisateur de supprimer, déplacer ou renommer un fichier

ce que j'essaie de faire c'est que pendant que mon programme utilise un fichier, je veux empêcher l'utilisateur de renommer, supprimer ou déplacer le fichier (bien... un déménagement est un supprimer et créer à un endroit différent selon Windows FileSystemWatcher, mais je digresse).

Il a été suggéré que j'utilise FileStream.Verrouillage ou un Mutex. Cependant, FileStream.Verrouillage ne semble empêcher le fichier modifié ce que j'essaie de faire permettre. En outre, Je ne suis pas très sûr si un mutex peut verrouiller un fichier, bien que je suis encore en train de lire dessus dans la bibliothèque .Net 4.0.

est-ce que quelqu'un a des conseils sur l'utilisation de l'un ou l'autre et s'il y a une solution basée sur le code à ce problème?

13
demandé sur Camilo Terevinto 2012-07-04 00:26:23

3 réponses

Lorsque vous ouvrez le fichier, vous pouvez spécifier le mode de partage.

ouvrir le fichier avec FileAccess.Lire vous donne la possibilité de lire le fichier, tandis que FileShare.ReadWrite permet le fichier de continuer à être édité, mais pas supprimé ou déplacé.

var fs = File.Open(@"C:\temp\file.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
MessageBox.Show("File Locked");  // While the messagebox is up, try to open or delete the file.
// Do your work here
fs.Close();
20
répondu John Koerner 2012-07-03 20:52:50

ceci empêchera de déplacer ou de supprimer le fichier mais permet de lire et d'écrire:

    using (FileStream fs = new FileStream(@"C:\TestDir\Test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        // Do Stuff.
    }

FileStream.Lock est en fait un lock de portée qui empêche la modification d'une partie particulière d'un fichier pendant que le lock est tenu.

3
répondu JamieSee 2012-07-03 20:43:46

si vous voulez tout verrouiller (ne pas lire, ne pas écrire, ne pas supprimer, ne pas bouger, ...)

Ouvrir un StreamWriter

StreamWriter sw = new StreamWriter(path);
0
répondu Hille 2017-09-28 12:18:25