eseguiamo diverse istanze del nostro programma (C#) su un singolo computer. In ogni istanza il nostro codice tenta di creare "molti" file temporanei con l'aiuto del metodo Path.GetTempFile(). E a volte, il nostro programma non riesce con un'eccezione:Path.GetTempFileName in MultiProcessing
Exception: Access to the path is denied.
StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Path.GetTempFileName()
ho controllato cartella temporanea e non ha trovato qualcosa di strano: libero su disco è sufficiente, il numero di file temporanei non è molto grande, ecc
I avere una sola spiegazione: un'istanza ottiene il file temporaneo e lo apre, ma nello stesso tempo un'altra istanza ottiene anche il nome del file temporaneo e prova ad aprirlo. Se è corretto? Se sì, come risolvere il problema, se non come capire cos'è un problema?
UPD: fallito sul computer con Windows Server 2008 HPC
Grazie, Igor.
Non credo che penso. Se il metodo 'GetTempFileName' non fosse thread-safe o non generasse un nome ben randomizzato, non sarebbe lì. Non che io sappia quale sia la causa esatta ... – Noldorin
Per eliminare quello che pensi possa essere la causa, fai un * if (Directory.Exists (myTempFolderName)) * prima di creare la cartella temporanea - se esiste allora genera un nuovo nome. – slugster
Vuoi dire, non è una buona pratica usare Path.GetTempFileName()? Se il metodo non "multi-thread o processo salva" come possiamo usarlo? quando ho bisogno di una cartella temporanea con un'estensione speciale, utilizzo Guid per generare un nome file univoco. – constructor