Add a System.Threading.Thread.Sleep(int32);
before deleting the file. What happens is that sometimes the folder being compressed did not have time to be closed by ZipFile
, soon, the application will return a folder exception in use, making it impossible to delete it. By adding the method described at the beginning of the reply your app will 'sleep' for the desired time (in milliseconds) which is exactly the time required for ZipFile
end your service and delete continue normally. Note:
ZipFile.CreateFromDirectory(sDiretorioZip, string.Concat(sDiretorioZip, ".zip"), CompressionLevel.Fastest, true);
DirectoryInfo dir = new DirectoryInfo(sDiretorioZip);
System.Threading.Thread.Sleep(100);
Directory.Delete(sDiretorioZip, true);
@EDIT: As requested, a code that excludes only when compression is finished.
ZipFile.CreateFromDirectory(sDiretorioZip, string.Concat(sDiretorioZip, ".zip"), CompressionLevel.Fastest, true);
DirectoryInfo dir = new DirectoryInfo(sDiretorioZip);
while (true)
{
System.Threading.Thread.Sleep(50); //Um timing opcional pra não utilizar tanto da máquina
try
{
Directory.Delete(sDiretorioZip, true); //Tentativa de exclusão, se o arquivo estiver em uso ele irá retornar uma exceção e o código irá se digirir ao bloco catch(){}
break; //Sai do loop infinito após a exclusão do arquivo não retornar erro
}
catch (IOException err)
{
//Se der uma exceção, arquivo em uso por exemplo, ele tenta excluir novamente, até conseguir.
continue;
}
}
//Continuação do seu código
Tried to give a
Thread.Sleep
?– Francisco