From 6bd7162d00c29b9122f3829cf6cc2f507185b82a Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 15 Sep 2016 20:32:18 -0700 Subject: [PATCH] [FileTools, ZipFile] Fix a couple things --- SabreTools.Helper/Objects/ZipFIle.cs | 23 +++++++---------------- SabreTools.Helper/Tools/FileTools.cs | 20 +++++++++++++++----- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/SabreTools.Helper/Objects/ZipFIle.cs b/SabreTools.Helper/Objects/ZipFIle.cs index 45579273..5acf9666 100644 --- a/SabreTools.Helper/Objects/ZipFIle.cs +++ b/SabreTools.Helper/Objects/ZipFIle.cs @@ -397,17 +397,14 @@ namespace SabreTools.Helper } // Now try to open the file for reading - FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); - int errorcode = fs.Read(new byte[1], 0, 1); - if (errorcode != 0) + _zipstream = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite); + int read = _zipstream.Read(new byte[1], 0, 1); + if (read != 1) { Close(); - if (errorcode == 32) - { - return ZipReturn.ZipFileLocked; - } return ZipReturn.ZipErrorOpeningFile; } + _zipstream.Position = 0; } catch (PathTooLongException) { @@ -420,7 +417,7 @@ namespace SabreTools.Helper return ZipReturn.ZipErrorOpeningFile; } - // If we succedded, set the flag for read + // If we succeeded, set the flag for read _zipOpen = ZipOpenType.OpenRead; // If we're not reading the headers, return @@ -618,13 +615,7 @@ namespace SabreTools.Helper _zipFileInfo = new FileInfo(filename); // Now try to open the file - FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - int errorcode = fs.Read(new byte[1], 0, 1); - if (errorcode != 0) - { - Close(); - return ZipReturn.ZipErrorOpeningFile; - } + _zipstream = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite); ZipOpen = ZipOpenType.OpenWrite; return ZipReturn.ZipGood; } @@ -838,7 +829,7 @@ namespace SabreTools.Helper } // Open the entry stream based on the current position - ZipFileEntry zfe = new ZipFileEntry(_zipstream, filename); + ZipFileEntry zfe = new ZipFileEntry(_zipstream, filename, true); ZipReturn zr = zfe.OpenWriteStream(raw, torrentZip, uncompressedSize, compressionMethod, out stream); _entries.Add(zfe); diff --git a/SabreTools.Helper/Tools/FileTools.cs b/SabreTools.Helper/Tools/FileTools.cs index ced5a4fa..a2f3d5b9 100644 --- a/SabreTools.Helper/Tools/FileTools.cs +++ b/SabreTools.Helper/Tools/FileTools.cs @@ -130,21 +130,30 @@ namespace SabreTools.Helper // Open the input file for reading readStream = File.OpenRead(inputFile); + ulong streamSize = (ulong)(new FileInfo(inputFile).Length); - // If the archive doesn't exist, create it + // Open or create the archive if (!File.Exists(archiveFileName)) { zipReturn = zipFile.Create(archiveFileName); } - // Otherwise, open the archive else { - zipReturn = zipFile.Open(archiveFileName, new FileInfo(archiveFileName).LastWriteTime.Ticks, true); + zipReturn = zipFile.Open(archiveFileName, new FileInfo(archiveFileName).LastWriteTime.Ticks, false); + zipFile.ZipOpen = ZipOpenType.OpenWrite; } - - zipReturn = zipFile.OpenWriteStream(false, true, inputFile, (ulong)(new FileInfo(inputFile).Length), CompressionMethod.Deflated, out writeStream); + if (zipReturn != ZipReturn.ZipGood) { + zipFile.Dispose(); + return success; + } + + // Open the stream for writing + zipReturn = zipFile.OpenWriteStream(false, true, rom.Name, streamSize, CompressionMethod.Deflated, out writeStream); + if (zipReturn != ZipReturn.ZipGood) + { + zipFile.Dispose(); return success; } @@ -165,6 +174,7 @@ namespace SabreTools.Helper { return success; } + zipFile.Close(); success = true; }