He intentado bloquear un archivo para que otros servicios clonados no puedan acceder al archivo. Luego leo el archivo y luego muevo el archivo cuando termina. El movimiento está permitido usando FileShare.Delete
.El comportamiento de bloqueo es diferente a través de los recursos compartidos de red
Sin embargo, en las pruebas posteriores, encontramos que este enfoque no funciona si estamos buscando un recurso compartido de red. Aprecio que mi enfoque no haya sido el mejor, pero mi pregunta específica es:
¿Por qué la demostración siguiente funciona contra el archivo local, pero no contra el archivo de red?
Cuanto más específico puede ser mejor, ya que he encontrado muy poca información en mis búsquedas que indique que los recursos compartidos de red se comportan de manera diferente a los discos locales.
string sourceFile = @"C:\TestFile.txt";
string localPath = @"C:\MyLocalFolder\TestFile.txt";
string networkPath = @"\\MyMachine\MyNetworkFolder\TestFile.txt";
File.WriteAllText(sourceFile, "Test data");
if (!File.Exists(localPath))
File.Copy(sourceFile, localPath);
foreach (string path in new string[] { localPath, networkPath })
{
using (FileStream fsLock = File.Open(path, FileMode.Open, FileAccess.ReadWrite, (FileShare.Read | FileShare.Delete)))
{
string target = path + ".out";
File.Move(path, target); //This is the point of failure, when working with networkPath
if (File.Exists(target))
File.Delete(target);
}
if (!File.Exists(path))
File.Copy(sourceFile, path);
}
EDIT: Vale la pena mencionar que si se desea mover el archivo de un recurso compartido de red, a otro recurso compartido de red, mientras que el bloqueo está en su lugar, esto funciona. El problema solo parece ocurrir al mover un archivo dentro de el mismo archivo compartido mientras está bloqueado.
Compruebe si tiene permisos para escribir en la carpeta compartida. – Nayan
Se han verificado los permisos y están bien. El usuario activo tiene control total en el directorio y comparte – MattH
¿Qué tipo de sistema operativo proporciona el recurso compartido? –