(2ffcd0a06) Retry writing files in SaveUtil.DecompressFile up to 4 times (in case the file is being used by another process), fixed DecompressFiletoStream "retrying" 4 times even if the first try succeeds

This commit is contained in:
Joonas Rikkonen
2019-05-16 05:44:15 +03:00
parent ec7e45e021
commit 7ae2b2f387
15 changed files with 256 additions and 256 deletions
@@ -360,8 +360,25 @@ namespace Barotrauma
if (!Directory.Exists(sFinalDir))
Directory.CreateDirectory(sFinalDir);
using (FileStream outFile = new FileStream(sFilePath, FileMode.Create, FileAccess.Write, FileShare.None))
outFile.Write(bytes, 0, iFileLen);
int maxRetries = 4;
for (int i = 0; i <= maxRetries; i++)
{
try
{
using (FileStream outFile = new FileStream(sFilePath, FileMode.Create, FileAccess.Write, FileShare.None))
{
outFile.Write(bytes, 0, iFileLen);
}
break;
}
catch (IOException e)
{
if (i >= maxRetries || !File.Exists(sFilePath)) { throw; }
DebugConsole.NewMessage("Failed decompress file \"" + sFilePath + "\" {" + e.Message + "}, retrying in 250 ms...", Color.Red);
Thread.Sleep(250);
}
}
return true;
}
@@ -376,7 +393,9 @@ namespace Barotrauma
{
using (FileStream inFile = new FileStream(sCompressedFile, FileMode.Open, FileAccess.Read, FileShare.None))
using (GZipStream zipStream = new GZipStream(inFile, CompressionMode.Decompress, true))
while (DecompressFile(sDir, zipStream, progress)) ;
while (DecompressFile(sDir, zipStream, progress)) { };
break;
}
catch (IOException e)
{