mirror of
https://github.com/oMaN-Rod/nxDumpFuse.git
synced 2024-11-22 18:26:40 +00:00
Catch fuse error if output file is already open by another process
This commit is contained in:
parent
21720adfae
commit
e53e074ff6
1 changed files with 45 additions and 34 deletions
|
@ -122,48 +122,59 @@ namespace nxDumpFuse.Services
|
||||||
Log(FuseSimpleLogType.Information, $"Fusing {inputFiles.Count} parts to {_outputFilePath} ({totalFileLength.ToMb()}MB)");
|
Log(FuseSimpleLogType.Information, $"Fusing {inputFiles.Count} parts to {_outputFilePath} ({totalFileLength.ToMb()}MB)");
|
||||||
|
|
||||||
_sw.Start();
|
_sw.Start();
|
||||||
await using var outputStream = File.Create(_outputFilePath!);
|
try
|
||||||
foreach (var inputFilePath in inputFiles)
|
|
||||||
{
|
{
|
||||||
if (_cts!.Token.IsCancellationRequested) return;
|
await using var outputStream = File.Create(_outputFilePath!);
|
||||||
long currentBytes = 0;
|
foreach (var inputFilePath in inputFiles)
|
||||||
int currentBlockSize;
|
|
||||||
long copySpeed = 0;
|
|
||||||
|
|
||||||
await using var inputStream = File.OpenRead(inputFilePath);
|
|
||||||
var fileLength = inputStream.Length;
|
|
||||||
|
|
||||||
Log(FuseSimpleLogType.Information, $"Fusing file part {++count}-> {inputFilePath} ({fileLength.ToMb()}MB)");
|
|
||||||
|
|
||||||
while ((currentBlockSize = inputStream.Read(buffer, 0, buffer.Length)) > 0)
|
|
||||||
{
|
{
|
||||||
if (_cts.Token.IsCancellationRequested) return;
|
if (_cts!.Token.IsCancellationRequested) return;
|
||||||
|
long currentBytes = 0;
|
||||||
|
int currentBlockSize;
|
||||||
|
long copySpeed = 0;
|
||||||
|
|
||||||
currentBytes += currentBlockSize;
|
await using var inputStream = File.OpenRead(inputFilePath);
|
||||||
totalBytes += currentBlockSize;
|
var fileLength = inputStream.Length;
|
||||||
|
|
||||||
try
|
Log(FuseSimpleLogType.Information,
|
||||||
|
$"Fusing file part {++count}-> {inputFilePath} ({fileLength.ToMb()}MB)");
|
||||||
|
|
||||||
|
while ((currentBlockSize = inputStream.Read(buffer, 0, buffer.Length)) > 0)
|
||||||
{
|
{
|
||||||
await outputStream.WriteAsync(buffer, 0, currentBlockSize, _cts.Token);
|
if (_cts.Token.IsCancellationRequested) return;
|
||||||
}
|
|
||||||
catch (TaskCanceledException e)
|
|
||||||
{
|
|
||||||
Log(FuseSimpleLogType.Error, e.Message);
|
|
||||||
_sw.Stop();
|
|
||||||
Update(0,0,0,0,0,true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var progress = totalBytes * 100.0 / totalFileLength;
|
currentBytes += currentBlockSize;
|
||||||
var progressPart = currentBytes * 100.0 / fileLength;
|
totalBytes += currentBlockSize;
|
||||||
if(_sw.ElapsedMilliseconds >= 1000) copySpeed = totalBytes / _sw.ElapsedMilliseconds.ToSeconds();
|
|
||||||
Update(count, inputFiles.Count, progress, progressPart, copySpeed);
|
try
|
||||||
|
{
|
||||||
|
await outputStream.WriteAsync(buffer, 0, currentBlockSize, _cts.Token);
|
||||||
|
}
|
||||||
|
catch (TaskCanceledException e)
|
||||||
|
{
|
||||||
|
Log(FuseSimpleLogType.Error, e.Message);
|
||||||
|
_sw.Stop();
|
||||||
|
Update(0, 0, 0, 0, 0, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var progress = totalBytes * 100.0 / totalFileLength;
|
||||||
|
var progressPart = currentBytes * 100.0 / fileLength;
|
||||||
|
if (_sw.ElapsedMilliseconds >= 1000)
|
||||||
|
copySpeed = totalBytes / _sw.ElapsedMilliseconds.ToSeconds();
|
||||||
|
Update(count, inputFiles.Count, progress, progressPart, copySpeed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Log(FuseSimpleLogType.Information, $"Fuse Completed in {_sw.ElapsedMilliseconds.ToSeconds()}s");
|
Log(FuseSimpleLogType.Information, $"Fuse Completed in {_sw.ElapsedMilliseconds.ToSeconds()}s");
|
||||||
_sw.Stop();
|
_sw.Stop();
|
||||||
Update(0, 0, 0, 0, 0, true);
|
Update(0, 0, 0, 0, 0, true);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log(FuseSimpleLogType.Error, e.Message);
|
||||||
|
_sw.Stop();
|
||||||
|
Update(0, 0, 0, 0, 0, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue