ejecutamos varias instancias de nuestro programa (C#) en una sola computadora. En cada instancia, nuestro código intenta crear "muchos" archivos temporales con ayuda del método Path.GetTempFile(). Y a veces, nuestro programa falla con una excepción:Path.GetTempFileName en MultiProcessing
Exception: Access to the path is denied.
StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Path.GetTempFileName()
he comprobado carpeta temporal y no encontrar algo extraño: libre en disco es suficiente, el número de archivos temporales no es muy grande, etc.
I solo tiene una explicación: una instancia obtiene el archivo temporal y lo abre, pero al mismo tiempo, otra instancia también obtiene el nombre del archivo temporal e intenta abrirlo. Si es correcto? En caso afirmativo, ¿cómo resolver el problema, sino cómo entender qué problema?
UPD: fallaron en el ordenador con Windows Server 2008 HPC
Gracias, Igor.
No es probable, creo. Si el método 'GetTempFileName' no fuera seguro para subprocesos o no generara un nombre bien aleatorio, no estaría allí. No es que yo sepa cuál es la causa exacta ... – Noldorin
Para eliminar lo que crees que podría ser la causa, simplemente haz un * if (Directory.Exists (myTempFolderName)) * antes de crear la carpeta temporal - si existe, genera un nuevo nombre. – slugster
¿Quiere decir que no es una buena práctica usar Path.GetTempFileName()? Si el método no es "multi thread o process save" ¿cómo podemos usarlo? cuando necesito una carpeta temporal con una extensión especial, utilizo Guid para generar un nombre de archivo único. – constructor