Répondre
Il suffit d'ouvrir exclusivement:
using (FileStream fs =
File.Open("MyFile.txt", FileMode.Open, FileAccess.Read, FileShare.None))
{
// use fs
}
Ref.
Mise à jour: En réponse au commentaire de l'affiche: Selon le MSDN doco en ligne, File.Open est pris en charge dans .Net Compact Framework 1.0 et 2.0.
Et pendant que vous y êtes, faites Assurez-vous de ne pas perdre la référence et de retarder le déverrouillage jusqu'à ce que le GC le libère de manière non déterministe - utilisez l'interface IDisposable, par exemple en enveloppant l'instruction ci-dessus dans un bloc 'using'. –
Je ne suis pas sûr que cela répond à la question. OP recherche la méthode FileStream.Lock, qui n'existe pas dans le framework compact. Lock empêche les autres processus de modifier le fichier, mais les laisse quand même le lire. Je pense que votre méthode bloquerait complètement les autres processus. – MusiGenesis
@MusiGenesis: L'affiche semble demander comment verrouiller un fichier ... –
Ceci est équivalent à la réponse de Mitch, sauf qu'il semble être disponible dans d'autres versions de .Net. Le seul argument significatif est FileShare.None
; les autres activent cette surcharge du constructeur, mais leurs valeurs sont déterminées par la façon dont vous utiliserez le flux.
using(var fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None)
{
// ...
}
FileShare.None jetterait une erreur « System.IO.IOException » si un autre thread tente d'accéder au fichier.
Vous pouvez utiliser une fonction en utilisant try/catch pour attendre la libération du fichier. Exemple here.
Ou vous pouvez utiliser une instruction de verrouillage avec une variable « factice » avant d'accéder à la fonction d'écriture:
// The Dummy Lock
public static List<int> DummyLock = new List<int>();
static void Main(string[] args)
{
MultipleFileWriting();
Console.ReadLine();
}
// Create two threads
private static void MultipleFileWriting()
{
BackgroundWorker thread1 = new BackgroundWorker();
BackgroundWorker thread2 = new BackgroundWorker();
thread1.DoWork += Thread1_DoWork;
thread2.DoWork += Thread2_DoWork;
thread1.RunWorkerAsync();
thread2.RunWorkerAsync();
}
// Thread 1 writes to file (and also to console)
private static void Thread1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 20; i++)
{
lock (DummyLock)
{
Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss") + " - 3");
AddLog(1);
}
}
}
// Thread 2 writes to file (and also to console)
private static void Thread2_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 20; i++)
{
lock (DummyLock)
{
Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss") + " - 4");
AddLog(2);
}
}
}
private static void AddLog(int num)
{
string logFile = Path.Combine(Environment.CurrentDirectory, "Log.txt");
string timestamp = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss");
using (FileStream fs = new FileStream(logFile, FileMode.Append,
FileAccess.Write, FileShare.None))
{
using (StreamWriter sr = new StreamWriter(fs))
{
sr.WriteLine(timestamp + ": " + num);
}
}
}
Vous pouvez également utiliser l'instruction « verrouillage » dans la fonction d'écriture réelle lui-même (à savoir l'intérieur AddLog) au lieu de dans les fonctions de l'arrière-plan du travailleur.
- 1. Forcer l'utilisateur à verrouiller le fichier dans SVN avant d'éditer
- 2. UDP Verrouiller?
- 3. Comment puis-je verrouiller le pays dans Google Maps
- 4. L'appel d'un File.Exist va-t-il verrouiller un fichier?
- 5. pouvons-nous verrouiller un répertoire?
- 6. Verrouiller le profilage dans le noyau Linux 2.6
- 7. Comment verrouiller une application Flash sur site?
- 8. Verrouiller un contrôle winforms
- 9. Filetage C# - Verrouiller l'objet
- 10. Python: Verrouiller l'accès au répertoire sous Windows
- 11. verrouiller la position d'un NSWindow
- 12. Est-il possible de verrouiller le jeu de données ASP.net?
- 13. MPI: Verrouiller le stdout - 1 processus à la fois?
- 14. en utilisant JS pour verrouiller un div
- 15. Comment éviter de verrouiller key-guard dans windows-mobile
- 16. Verrouiller quelqu'un à un domaine particulier
- 17. Comment "verrouiller" des colonnes dans un tableau HTML?
- 18. Comment verrouiller IO partagé par fourche dans ruby
- 19. Comment verrouiller la console sur des threads dans C# .NET?
- 20. AVAudioPlayer, Catégories de session audio et verrouiller
- 21. Comment verrouiller la base de données mysql exclusive?
- 22. Verrouiller PC en Python sur Ubuntu
- 23. Verrouiller les fonctionnalités Word et PowerPoint
- 24. Procédure stockée db2. verrouiller/libérer la table
- 25. Verrouiller les comptes Active Directory par programme
- 26. verrouiller une table pour read permet encore de sélectionner (mysql)
- 27. Pourquoi compiler mon projet Biztalk 2009 verrouiller des fichiers?
- 28. Comment déployer le fichier SWF?
- 29. comment fermer le fichier ouvert?
- 30. comment faire le fichier d'installation
Cela pourrait entraîner des dizaines de réponses différentes, qui seraient toutes valables. S'il vous plaît ajouter plus de détails. (Btw, juste l'avis que le fichier pourrait déjà bloquer un certain nombre d'autres d'y accéder.) –
Insérez la clé, tournez-le vers la gauche. –
Cela a fonctionné pour moi http://stackoverflow.com/questions/4692981/c-sharp-blocking-a-folder-from-being-changed-while-processing/4693064#4693064 – Vbp