risposta
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 l'online MSDN doco, File.Open è supportato in. Net Compact Framework 1.0 e 2.0.
E mentre ci sei, fai sicuro di non perdere il riferimento e ritardare lo sblocco finché il GC non lo rilasci in modo non deterministico - usa l'interfaccia IDisposable, ad esempio avvolgendo l'affermazione precedente in un blocco 'using'. –
Non sicuro che questo risponda alla domanda. OP sta cercando il metodo FileStream.Lock, che non esiste nel framework compatto. Blocca impedisce ad altri processi di modificare il file, ma continua a consentirgli di leggerlo. Penso che il tuo metodo bloccherebbe completamente altri processi. – MusiGenesis
@MusiGenesis: Il poster sembra chiedere come bloccare un file ... –
Questo equivale alla risposta di Mitch, tranne che sembra essere disponibile in più versioni di .Net. L'unico argomento significativo è FileShare.None
; gli altri abilitano quel sovraccarico del costruttore, ma i loro valori sono determinati da come userete il flusso.
using(var fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None)
{
// ...
}
FileShare.NONE sarebbe lanciare un errore "System.IO.IOException" se un altro thread tenta di accedere al file.
È possibile utilizzare alcune funzioni utilizzando try/catch per attendere il rilascio del file. Esempio here.
Oppure si potrebbe usare una dichiarazione di blocco con qualche variabile "fittizio" prima di accedere alla funzione di scrittura:
// 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);
}
}
}
È anche possibile utilizzare il "Lock" dichiarazione nella funzione attuale scrittura stessa (cioè all'interno AddLog) invece che in background le funzioni del lavoratore.
- 1. Come bloccare i file .mdmp dalla creazione
- 2. BEA-141297 - Impossibile ottenere bloccare il file server viene rilevato
- 3. Errore Berkeley DB: impossibile bloccare il file je.lck
- 4. Come bloccare in esclusiva il database mysql?
- 5. Mockito: come bloccare il setter getter
- 6. Utilizzare l'assembly .NET senza bloccare il file dll
- 7. Impossibile bloccare il file utilizzando il flock con il descrittore di file
- 8. Lazy Loading UIImages da file senza bloccare il thread principale?
- 9. È possibile bloccare il file sqlite sul filesystem NFS?
- 10. Bloccare l'intestazione, scorrere il GridView
- 11. Come bloccare "V8?
- 12. Come posso bloccare un file durante la scrittura tramite FileStream?
- 13. Come bloccare un file con i processi esterni
- 14. Come posso bloccare un file zippato senza leggerne l'intero contenuto?
- 15. In c, come si può bloccare un descrittore di file?
- 16. Come bloccare il sito web usando il server SQUID
- 17. Come forzare Entity Framework di non bloccare il database
- 18. C# per bloccare o non bloccare
- 19. Come bloccare il browser nella cache GWT nocache.js
- 20. Come bloccare una singola riga
- 21. Come bloccare una singola scheletro
- 22. Come bloccare per parametro metodo?
- 23. come bloccare un'azione asp.net mvc?
- 24. PyDev aggiunta schede per bloccare il rientro
- 25. creare un indice senza bloccare il DB
- 26. Come posso bloccare l'esecuzione di un programma?
- 27. Come bloccare il comportamento della scheda 'smart' di PyCharm
- 28. iOS come bloccare il dispositivo di scorrimento in punti discreti
- 29. Come bloccare un changeset dall'unione in TFS?
- 30. Errore "impossibile bloccare"
Ciò potrebbe comportare dozzine di risposte diverse, che sarebbero tutte valide. Si prega di aggiungere ulteriori dettagli. (A proposito, solo l'opinione del file potrebbe già impedire a molti altri di accedervi.) –
Inserisci la chiave, girala a sinistra. –
Questo ha funzionato per me http://stackoverflow.com/questions/4692981/c-sharp-blocking-a-folder-from-being-changed-while-processing/4693064#4693064 – Vbp