diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs
index bb615438..2944fe85 100644
--- a/SabreTools.DatFiles/Formats/SabreJSON.cs
+++ b/SabreTools.DatFiles/Formats/SabreJSON.cs
@@ -29,7 +29,8 @@ namespace SabreTools.DatFiles.Formats
public override void ParseFile(string filename, int indexId, bool keep, bool statsOnly = false, bool throwOnError = false)
{
// Prepare all internal variables
- var sr = new StreamReader(System.IO.File.OpenRead(filename), new UTF8Encoding(false));
+ var fs = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ var sr = new StreamReader(fs, new UTF8Encoding(false));
var jtr = new JsonTextReader(sr);
var source = new Source(indexId, filename);
long sourceIndex = ItemsDB.AddSource(source);
diff --git a/SabreTools.DatTools/Rebuilder.cs b/SabreTools.DatTools/Rebuilder.cs
index 04e56beb..66a2b0af 100644
--- a/SabreTools.DatTools/Rebuilder.cs
+++ b/SabreTools.DatTools/Rebuilder.cs
@@ -787,7 +787,7 @@ namespace SabreTools.DatTools
// Otherwise, just open the filestream
else
{
- stream = System.IO.File.OpenRead(file);
+ stream = System.IO.File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
}
// If the stream is null, then continue
diff --git a/SabreTools.FileTypes/Aaru/AaruFormat.cs b/SabreTools.FileTypes/Aaru/AaruFormat.cs
index c4bda79c..df33909f 100644
--- a/SabreTools.FileTypes/Aaru/AaruFormat.cs
+++ b/SabreTools.FileTypes/Aaru/AaruFormat.cs
@@ -53,7 +53,7 @@ namespace SabreTools.FileTypes.Aaru
/// Filename respresenting the AaruFormat file
public static AaruFormat? Create(string filename)
{
- using FileStream fs = File.OpenRead(filename);
+ using Stream fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
return Create(fs);
}
diff --git a/SabreTools.FileTypes/Archives/GZipArchive.cs b/SabreTools.FileTypes/Archives/GZipArchive.cs
index 6efc5baa..99b9814b 100644
--- a/SabreTools.FileTypes/Archives/GZipArchive.cs
+++ b/SabreTools.FileTypes/Archives/GZipArchive.cs
@@ -228,10 +228,11 @@ namespace SabreTools.FileTypes.Archives
{
gzipEntryRom.Filename = gamename;
- using BinaryReader br = new(File.OpenRead(Filename));
- br.BaseStream.Seek(-8, SeekOrigin.End);
- gzipEntryRom.CRC = br.ReadBytesBigEndian(4);
- gzipEntryRom.Size = br.ReadInt32BigEndian();
+ using Stream stream = File.Open(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ stream.Seek(-8, SeekOrigin.End);
+ gzipEntryRom.CRC = stream.ReadBytes(4);
+ Array.Reverse(gzipEntryRom.CRC);
+ gzipEntryRom.Size = stream.ReadInt32BigEndian();
}
// Otherwise, use the stream directly
else
@@ -298,14 +299,12 @@ namespace SabreTools.FileTypes.Archives
}
// Get the Romba-specific header data
- BinaryReader br = new(File.OpenRead(Filename));
- byte[] header = br.ReadBytes(12); // Get preamble header for checking
- br.ReadBytes(16); // headermd5
- br.ReadBytes(4); // headercrc
- br.ReadUInt64(); // headersz
-#if NET40_OR_GREATER
- br.Dispose();
-#endif
+ Stream stream = File.Open(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ byte[] header = stream.ReadBytes(12); // Get preamble header for checking
+ _ = stream.ReadBytes(16); // headermd5
+ _ = stream.ReadBytes(4); // headercrc
+ _ = stream.ReadUInt64(); // headersz
+ stream.Dispose();
// If the header is not correct, return a blank rom
bool correct = true;
@@ -363,14 +362,12 @@ namespace SabreTools.FileTypes.Archives
byte[] headermd5; // MD5
byte[] headercrc; // CRC
ulong headersz; // Int64 size
- BinaryReader br = new(File.OpenRead(Filename));
- header = br.ReadBytes(12);
- headermd5 = br.ReadBytes(16);
- headercrc = br.ReadBytes(4);
- headersz = br.ReadUInt64();
-#if NET40_OR_GREATER
- br.Dispose();
-#endif
+ Stream stream = File.Open(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ header = stream.ReadBytes(12);
+ headermd5 = stream.ReadBytes(16);
+ headercrc = stream.ReadBytes(4);
+ headersz = stream.ReadUInt64();
+ stream.Dispose();
// If the header is not correct, return a blank rom
bool correct = true;
@@ -421,7 +418,8 @@ namespace SabreTools.FileTypes.Archives
inputFile = Path.GetFullPath(inputFile);
// Get the file stream for the file and write out
- return Write(File.OpenRead(inputFile), outDir, baseFile);
+ using Stream inputStream = File.Open(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ return Write(inputStream, outDir, baseFile);
}
///
diff --git a/SabreTools.FileTypes/Archives/RarArchive.cs b/SabreTools.FileTypes/Archives/RarArchive.cs
index 3b22dba0..0dcae30c 100644
--- a/SabreTools.FileTypes/Archives/RarArchive.cs
+++ b/SabreTools.FileTypes/Archives/RarArchive.cs
@@ -194,7 +194,7 @@ namespace SabreTools.FileTypes.Archives
try
{
- SharpCompress.Archives.Rar.RarArchive ra = SharpCompress.Archives.Rar.RarArchive.Open(File.OpenRead(Filename));
+ SharpCompress.Archives.Rar.RarArchive ra = SharpCompress.Archives.Rar.RarArchive.Open(File.Open(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
foreach (RarArchiveEntry entry in ra.Entries.Where(e => e != null && !e.IsDirectory))
{
// Create a blank item for the entry
@@ -294,8 +294,18 @@ namespace SabreTools.FileTypes.Archives
///
public override bool Write(string inputFile, string outDir, BaseFile? baseFile)
{
+ // Check that the input file exists
+ if (!File.Exists(inputFile))
+ {
+ _logger.Warning($"File '{inputFile}' does not exist!");
+ return false;
+ }
+
+ inputFile = Path.GetFullPath(inputFile);
+
// Get the file stream for the file and write out
- return Write(File.OpenRead(inputFile), outDir, baseFile);
+ using Stream inputStream = File.Open(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ return Write(inputStream, outDir, baseFile);
}
///
diff --git a/SabreTools.FileTypes/Archives/SevenZipArchive.cs b/SabreTools.FileTypes/Archives/SevenZipArchive.cs
index 6007f126..08c5c3af 100644
--- a/SabreTools.FileTypes/Archives/SevenZipArchive.cs
+++ b/SabreTools.FileTypes/Archives/SevenZipArchive.cs
@@ -378,8 +378,18 @@ namespace SabreTools.FileTypes.Archives
///
public override bool Write(string inputFile, string outDir, BaseFile? baseFile)
{
+ // Check that the input file exists
+ if (!File.Exists(inputFile))
+ {
+ _logger.Warning($"File '{inputFile}' does not exist!");
+ return false;
+ }
+
+ inputFile = Path.GetFullPath(inputFile);
+
// Get the file stream for the file and write out
- return Write(File.OpenRead(inputFile), outDir, baseFile);
+ using Stream inputStream = File.Open(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ return Write(inputStream, outDir, baseFile);
}
///
@@ -638,7 +648,7 @@ namespace SabreTools.FileTypes.Archives
int index = inputIndexMap[key];
// Open the input file for reading
- Stream freadStream = File.OpenRead(inputFiles[index]);
+ Stream freadStream = File.Open(inputFiles[index], FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
ulong istreamSize = (ulong)new FileInfo(inputFiles[index]).Length;
DateTime dt = DateTime.Now;
@@ -720,7 +730,7 @@ namespace SabreTools.FileTypes.Archives
if (index < 0)
{
// Open the input file for reading
- Stream freadStream = File.OpenRead(inputFiles[-index - 1]);
+ Stream freadStream = File.Open(inputFiles[-index - 1], FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
ulong istreamSize = (ulong)(new FileInfo(inputFiles[-index - 1]).Length);
DateTime dt = DateTime.Now;
diff --git a/SabreTools.FileTypes/Archives/TapeArchive.cs b/SabreTools.FileTypes/Archives/TapeArchive.cs
index 5873c53b..6fc69583 100644
--- a/SabreTools.FileTypes/Archives/TapeArchive.cs
+++ b/SabreTools.FileTypes/Archives/TapeArchive.cs
@@ -187,7 +187,7 @@ namespace SabreTools.FileTypes.Archives
try
{
- TarArchive ta = TarArchive.Open(File.OpenRead(Filename!));
+ TarArchive ta = TarArchive.Open(File.Open(Filename!, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
foreach (TarArchiveEntry entry in ta.Entries.Where(e => e != null && !e.IsDirectory))
{
// Create a blank item for the entry
@@ -283,8 +283,18 @@ namespace SabreTools.FileTypes.Archives
///
public override bool Write(string inputFile, string outDir, BaseFile? baseFile)
{
+ // Check that the input file exists
+ if (!File.Exists(inputFile))
+ {
+ _logger.Warning($"File '{inputFile}' does not exist!");
+ return false;
+ }
+
+ inputFile = Path.GetFullPath(inputFile);
+
// Get the file stream for the file and write out
- return Write(File.OpenRead(inputFile), outDir, baseFile);
+ using Stream inputStream = File.Open(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ return Write(inputStream, outDir, baseFile);
}
///
@@ -492,7 +502,10 @@ namespace SabreTools.FileTypes.Archives
usableDate = dt;
// Copy the input stream to the output
- tarFile.AddEntry(baseFiles[index].Filename!, File.OpenRead(inputFiles[index]), size: baseFiles[index].Size ?? 0, modified: usableDate);
+ tarFile.AddEntry(baseFiles[index].Filename!,
+ File.Open(inputFiles[index], FileMode.Open, FileAccess.Read, FileShare.ReadWrite),
+ size: baseFiles[index].Size ?? 0,
+ modified: usableDate);
}
}
@@ -554,7 +567,10 @@ namespace SabreTools.FileTypes.Archives
usableDate = dt;
// Copy the input file to the output
- tarFile.AddEntry(baseFiles[-index - 1].Filename!, File.OpenRead(inputFiles[-index - 1]), size: baseFiles[-index - 1].Size ?? 0, modified: usableDate);
+ tarFile.AddEntry(baseFiles[-index - 1].Filename!,
+ File.Open(inputFiles[-index - 1], FileMode.Open, FileAccess.Read, FileShare.ReadWrite),
+ size: baseFiles[-index - 1].Size ?? 0,
+ modified: usableDate);
}
// Otherwise, copy the file from the old archive
diff --git a/SabreTools.FileTypes/Archives/XZArchive.cs b/SabreTools.FileTypes/Archives/XZArchive.cs
index 984169d4..7ff7e0c9 100644
--- a/SabreTools.FileTypes/Archives/XZArchive.cs
+++ b/SabreTools.FileTypes/Archives/XZArchive.cs
@@ -70,7 +70,7 @@ namespace SabreTools.FileTypes.Archives
// Decompress the _filename stream
FileStream outstream = File.Create(Path.Combine(outDir, Path.GetFileNameWithoutExtension(Filename)!));
- var xz = new XZStream(File.OpenRead(Filename!));
+ var xz = new XZStream(File.Open(Filename!, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
xz.CopyTo(outstream);
// Dispose of the streams
@@ -156,7 +156,7 @@ namespace SabreTools.FileTypes.Archives
{
// Open the entry stream
string realEntry = Path.GetFileNameWithoutExtension(Filename);
- var stream = new XZStream(File.OpenRead(Filename));
+ var stream = new XZStream(File.Open(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
// Return the stream
return (stream, realEntry);
@@ -206,15 +206,16 @@ namespace SabreTools.FileTypes.Archives
{
xzEntryRom.Filename = gamename;
- using BinaryReader br = new(File.OpenRead(Filename!));
- br.BaseStream.Seek(-8, SeekOrigin.End);
- xzEntryRom.CRC = br.ReadBytesBigEndian(4);
- xzEntryRom.Size = br.ReadInt32BigEndian();
+ using Stream fs = File.Open(Filename!, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ fs.Seek(-8, SeekOrigin.End);
+ xzEntryRom.CRC = fs.ReadBytes(4);
+ Array.Reverse(xzEntryRom.CRC);
+ xzEntryRom.Size = fs.ReadInt32BigEndian();
}
// Otherwise, use the stream directly
else
{
- var xzStream = new XZStream(File.OpenRead(Filename!));
+ var xzStream = new XZStream(File.Open(Filename!, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
xzEntryRom = FileTypeTool.GetInfo(xzStream, _hashTypes);
xzEntryRom.Filename = gamename;
xzStream.Dispose();
@@ -310,7 +311,8 @@ namespace SabreTools.FileTypes.Archives
inputFile = Path.GetFullPath(inputFile);
// Get the file stream for the file and write out
- return Write(File.OpenRead(inputFile), outDir, baseFile);
+ using Stream inputStream = File.Open(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ return Write(inputStream, outDir, baseFile);
}
///
diff --git a/SabreTools.FileTypes/Archives/ZipArchive.cs b/SabreTools.FileTypes/Archives/ZipArchive.cs
index bb0c37e5..3450e3c7 100644
--- a/SabreTools.FileTypes/Archives/ZipArchive.cs
+++ b/SabreTools.FileTypes/Archives/ZipArchive.cs
@@ -556,8 +556,18 @@ namespace SabreTools.FileTypes.Archives
///
public override bool Write(string inputFile, string outDir, BaseFile? baseFile)
{
+ // Check that the input file exists
+ if (!File.Exists(inputFile))
+ {
+ _logger.Warning($"File '{inputFile}' does not exist!");
+ return false;
+ }
+
+ inputFile = Path.GetFullPath(inputFile);
+
// Get the file stream for the file and write out
- return Write(File.OpenRead(inputFile), outDir, baseFile);
+ using Stream inputStream = File.Open(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ return Write(inputStream, outDir, baseFile);
}
///
@@ -809,7 +819,7 @@ namespace SabreTools.FileTypes.Archives
int index = inputIndexMap[key];
// Open the input file for reading
- Stream freadStream = File.OpenRead(inputFiles[index]);
+ Stream freadStream = File.Open(inputFiles[index], FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
ulong istreamSize = (ulong)(new FileInfo(inputFiles[index]).Length);
DateTime dt = DateTime.Now;
@@ -891,7 +901,7 @@ namespace SabreTools.FileTypes.Archives
if (index < 0)
{
// Open the input file for reading
- Stream freadStream = File.OpenRead(inputFiles[-index - 1]);
+ Stream freadStream = File.Open(inputFiles[-index - 1], FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
ulong istreamSize = (ulong)(new FileInfo(inputFiles[-index - 1]).Length);
DateTime dt = DateTime.Now;
diff --git a/SabreTools.FileTypes/CHD/CHDFile.cs b/SabreTools.FileTypes/CHD/CHDFile.cs
index c7634673..7ac17ce9 100644
--- a/SabreTools.FileTypes/CHD/CHDFile.cs
+++ b/SabreTools.FileTypes/CHD/CHDFile.cs
@@ -22,7 +22,7 @@ namespace SabreTools.FileTypes.CHD
/// Filename respresenting the CHD file
public static CHDFile? Create(string filename)
{
- using var fs = File.OpenRead(filename);
+ using Stream fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
return Create(fs);
}
diff --git a/SabreTools.FileTypes/FileTypeTool.cs b/SabreTools.FileTypes/FileTypeTool.cs
index 8195f44b..4359ae39 100644
--- a/SabreTools.FileTypes/FileTypeTool.cs
+++ b/SabreTools.FileTypes/FileTypeTool.cs
@@ -123,7 +123,7 @@ namespace SabreTools.FileTypes
/// Hashes to include in the information
/// Indicates if the underlying read stream should be kept open
/// Populated BaseFile object if success, empty one on error
- public static BaseFile GetInfo(Stream? input, long size, HashType[]? hashes, bool keepReadOpen)
+ public static BaseFile GetInfo(Stream? input, long size, HashType[] hashes, bool keepReadOpen)
{
// If we have no stream
if (input == null)
diff --git a/SabreTools.FileTypes/Folder.cs b/SabreTools.FileTypes/Folder.cs
index bc016941..be7d6554 100644
--- a/SabreTools.FileTypes/Folder.cs
+++ b/SabreTools.FileTypes/Folder.cs
@@ -189,7 +189,7 @@ namespace SabreTools.FileTypes
// If we had a file, open and return the stream
if (!string.IsNullOrEmpty(match))
{
- var stream = File.OpenRead(match);
+ Stream stream = File.Open(match, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
return (stream, match);
}
@@ -266,8 +266,8 @@ namespace SabreTools.FileTypes
///
public bool Write(string inputFile, string outDir, BaseFile? baseFile)
{
- FileStream fs = File.OpenRead(inputFile);
- return Write(fs, outDir, baseFile);
+ using Stream inputStream = File.Open(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+ return Write(inputStream, outDir, baseFile);
}
///