Usando C# ejecutándose en mono en Linux, tenga en cuenta que el siguiente código funciona bien en Windows puede bloquear un archivo a través del proceso pero no en Linux a través de mono (ubuntu 14.04)
new FileStream("myfile.lock",FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.None);investigación de Internet, debería poder hacerlo con bloqueo de aviso
FileStream.Locksin embargo, no funciona. probado con dos procesos en ubuntu 14.04, ambos pueden ejecutar "FileStream.Lock(0, int.MaxValue)". Espero que el último falle con la excepción del código fuente .
alguien sabe hay alguna solucion?
Obtenga ayuda de la lista de correo mono " http://mono.1490590.n4.nabble.com/File-Locking-td4663839.html "
a continuación se muestra la cita de respuesta de "Edward Ned Harvey (mono)"
Un poco sorta. El problema subyacente es que OSX, Linux y Windows tienen diferentes construcciones de bloqueo de archivos subyacentes y, por supuesto, existe cierta variabilidad incluso sobre qué sistema de archivos se está utilizando. No descubrí a fondo todas las respuestas para cada sistema operativo o sistema de archivos, y no sé en qué situaciones será lo suficientemente bueno, pero esto es lo que terminé usando, funciona en las condiciones que necesitábamos para que funcionara:
using (var foo = new FileStream(filePath, FileMode.Open,FileAccess.ReadWrite, FileShare.None)) { // must include Write access in order to lock file foo.Lock(0, 0); // 0,0 has special meaning to lock entire file regardless of length }Para Windows, basta con especificar FileAccess y FileShare. Para Linux, al menos ext4, los archivos se pueden leer simultáneamente independientemente de lo que especifique para FileAccess y FileShare. El método Lock() hace una especie de bloqueo suave. El sistema operativo no lo hace cumplir, pero al menos en todas las situaciones que probamos, otras aplicaciones cliente respetan el bloqueo. No investigué más profundamente.