Nel mio metodo di azione WebApi
, voglio creare/sovrascrivere una cartella utilizzando questo codice:Utilizzando Directory.Delete() e Directory.CreateDirectory() per sovrascrivere una cartella
string myDir = "...";
if(Directory.Exists(myDir))
{
Directory.Delete(myDir, true);
}
Directory.CreateDirectory(myDir);
// 1 - Check the dir
Debug.WriteLine("Double check if the Dir is created: " + Directory.Exists(myDir));
// Some other stuff here...
// 2 - Check the dir again
Debug.WriteLine("Check again if the Dir still exists: " + Directory.Exists(myDir));
Problema
Stranamente, a volte proprio dopo aver creato la directory, la directory non esiste!
A volte quando si controlla la dir per la prima volta (dove è il numero 1); Directory.Exist()
restituisce true
, altre volte false
. Lo stesso accade quando si controlla la dir per la seconda volta (dove è il numero 2).
Note
- Nessuno di questa parte del codice di gettare alcuna eccezione.
- Può riprodurlo solo quando si pubblica il sito Web sul server. (Windows server 2008)
- Accade quando si accede alla stessa cartella.
Domande
- Si tratta di una condizione di competizione problema di concorrenza?
- Non
WebApi
o il sistema operativo gestisce la concorrenza? - È questo il modo corretto di sovrascrivere una cartella?
- Devo bloccare i file manualmente quando abbiamo molte richieste API sullo stesso file?
o, in generale:
- Qual è il motivo di questo strano comportamento?
UPDATE:
Utilizzando
DirectoryInfo
eRefresh()
invece diDirectory
non risolve il problema.accade solo quando l'opzione ricorsiva di Elimina è
true
. (e la directory non è vuota).
La directory è una condivisione di file (vale a dire il disco su una macchina diversa dal server Web)? – jlew
@jlew No, si trova sullo stesso computer del server web. –