Come bloccare il file

per favore dimmi come bloccare il file in c #

Grazie

Basta aprirlo esclusivamente:

using (FileStream fs = File.Open("MyFile.txt", FileMode.Open, FileAccess.Read, FileShare.None)) { // use fs } 

Ref .

Aggiornamento : in risposta al commento del poster: Secondo il documento MSDN online, File.Open è supportato in .Net Compact Framework 1.0 e 2.0.

FileShare.None genererebbe un errore “System.IO.IOException” se un altro thread sta tentando di accedere al file.

È ansible utilizzare alcune funzioni utilizzando try / catch per attendere il rilascio del file. Esempio qui .

Oppure potresti usare un’istruzione di blocco con qualche variabile “dummy” prima di accedere alla funzione di scrittura:

  // The Dummy Lock public static List DummyLock = new List(); 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); } } } 

È inoltre ansible utilizzare l'istruzione "lock" nella funzione di scrittura effettiva stessa (ad esempio all'interno di AddLog) anziché nelle funzioni di background worker.