Extract out IO namespace, Part 1

This commit is contained in:
Matt Nadareski
2020-12-07 15:08:57 -08:00
parent ee3e4645a0
commit 96e2afcfe4
57 changed files with 266 additions and 32 deletions

4
.gitignore vendored
View File

@@ -9,9 +9,11 @@
/SabreTools/Properties/launchSettings.json
/SabreTools/SabreTools.csproj.user
/SabreTools.Data/bin/
/SabreTools.Data/obj
/SabreTools.Data/obj/
/SabreTools.Help/bin/
/SabreTools.Help/obj/
/SabreTools.IO/bin/
/SabreTools.IO/obj/
/SabreTools.Library/bin/
/SabreTools.Library/obj/
/SabreTools.Logging/bin/

View File

@@ -3,9 +3,9 @@ using System.IO;
using System.Linq;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.FileTypes;
using SabreTools.Library.IO;
namespace RombaSharp.Features
{

View File

@@ -2,8 +2,8 @@
using System.IO;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.IO;
namespace RombaSharp.Features
{

View File

@@ -2,9 +2,9 @@
using System.IO;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.Filtering;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;
namespace RombaSharp.Features

View File

@@ -2,8 +2,8 @@
using System.IO;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.IO;
namespace RombaSharp.Features
{

View File

@@ -3,6 +3,7 @@ using System.IO;
using System.Linq;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.IO;
using Microsoft.Data.Sqlite;

View File

@@ -3,7 +3,7 @@ using System.IO;
using System.Linq;
using SabreTools.Help;
using SabreTools.Library.IO;
using SabreTools.IO;
namespace RombaSharp.Features
{

View File

@@ -3,8 +3,8 @@ using System.IO;
using SabreTools.Data;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.IO;
namespace RombaSharp.Features
{

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net48;netcoreapp3.1;net5.0</TargetFrameworks>

View File

@@ -1,7 +1,7 @@
using System;
using System.IO;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
/// <summary>
/// Big endian reading overloads for BinaryReader

View File

@@ -7,7 +7,7 @@ using System.Text.RegularExpressions;
using SabreTools.Data;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
public class ClrMameProReader : IDisposable
{

View File

@@ -2,7 +2,7 @@
using System.IO;
using System.Text;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
/// <summary>
/// ClrMamePro writer patterned heavily off of XmlTextWriter

View File

@@ -4,9 +4,8 @@ using System.IO;
using System.Linq;
using SabreTools.Logging;
using NaturalSort;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
/// <summary>
/// Extensions to Directory functionality
@@ -21,7 +20,7 @@ namespace SabreTools.Library.IO
{
foreach (string file in Directory.EnumerateFiles(dir, "*", SearchOption.TopDirectoryOnly))
{
FileExtensions.TryDelete(file);
FileTryDelete(file);
}
foreach (string subdir in Directory.EnumerateDirectories(dir, "*", SearchOption.TopDirectoryOnly))
@@ -337,5 +336,185 @@ namespace SabreTools.Library.IO
return false;
}
}
// TODO: Remove this entire section once External and the rest of IO is in its own library (or pulled in otherwise)
#region TEMPORARY - REMOVEME
/// <summary>
/// Try to safely delete a file, optionally throwing the error
/// </summary>
/// <param name="file">Name of the file to delete</param>
/// <param name="throwOnError">True if the error that is thrown should be thrown back to the caller, false otherwise</param>
/// <returns>True if the file didn't exist or could be deleted, false otherwise</returns>
private static bool FileTryDelete(string file, bool throwOnError = false)
{
// Check if the file exists first
if (!File.Exists(file))
return true;
// Now wrap deleting the file
try
{
File.Delete(file);
return true;
}
catch (Exception ex)
{
if (throwOnError)
throw ex;
else
return false;
}
}
private class NaturalComparer : Comparer<string>, IDisposable
{
private Dictionary<string, string[]> table;
public NaturalComparer()
{
table = new Dictionary<string, string[]>();
}
public void Dispose()
{
table.Clear();
table = null;
}
public override int Compare(string x, string y)
{
if (x.ToLowerInvariant() == y.ToLowerInvariant())
{
return x.CompareTo(y);
}
if (!table.TryGetValue(x, out string[] x1))
{
//x1 = Regex.Split(x.Replace(" ", string.Empty), "([0-9]+)");
x1 = System.Text.RegularExpressions.Regex.Split(x.ToLowerInvariant(), "([0-9]+)").Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
table.Add(x, x1);
}
if (!table.TryGetValue(y, out string[] y1))
{
//y1 = Regex.Split(y.Replace(" ", string.Empty), "([0-9]+)");
y1 = System.Text.RegularExpressions.Regex.Split(y.ToLowerInvariant(), "([0-9]+)").Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
table.Add(y, y1);
}
for (int i = 0; i < x1.Length && i < y1.Length; i++)
{
if (x1[i] != y1[i])
{
return PartCompare(x1[i], y1[i]);
}
}
if (y1.Length > x1.Length)
{
return 1;
}
else if (x1.Length > y1.Length)
{
return -1;
}
else
{
return x.CompareTo(y);
}
}
private static int PartCompare(string left, string right)
{
if (!long.TryParse(left, out long x))
{
return CompareNumeric(left, right);
}
if (!long.TryParse(right, out long y))
{
return CompareNumeric(left, right);
}
// If we have an equal part, then make sure that "longer" ones are taken into account
if (x.CompareTo(y) == 0)
{
return left.Length - right.Length;
}
return x.CompareTo(y);
}
private static int CompareNumeric(string s1, string s2)
{
// Save the orginal strings, for later comparison
string s1orig = s1;
string s2orig = s2;
// We want to normalize the strings, so we set both to lower case
s1 = s1.ToLowerInvariant();
s2 = s2.ToLowerInvariant();
// If the strings are the same exactly, return
if (s1 == s2)
return s1orig.CompareTo(s2orig);
// If one is null, then say that's less than
if (s1 == null)
return -1;
if (s2 == null)
return 1;
// Now split into path parts after converting AltDirSeparator to DirSeparator
s1 = s1.Replace(System.IO.Path.AltDirectorySeparatorChar, System.IO.Path.DirectorySeparatorChar);
s2 = s2.Replace(System.IO.Path.AltDirectorySeparatorChar, System.IO.Path.DirectorySeparatorChar);
string[] s1parts = s1.Split(System.IO.Path.DirectorySeparatorChar);
string[] s2parts = s2.Split(System.IO.Path.DirectorySeparatorChar);
// Then compare each part in turn
for (int j = 0; j < s1parts.Length && j < s2parts.Length; j++)
{
int compared = CompareNumericPart(s1parts[j], s2parts[j]);
if (compared != 0)
return compared;
}
// If we got out here, then it looped through at least one of the strings
if (s1parts.Length > s2parts.Length)
return 1;
if (s1parts.Length < s2parts.Length)
return -1;
return s1orig.CompareTo(s2orig);
}
private static int CompareNumericPart(string s1, string s2)
{
// Otherwise, loop through until we have an answer
for (int i = 0; i < s1.Length && i < s2.Length; i++)
{
int s1c = s1[i];
int s2c = s2[i];
// If the characters are the same, continue
if (s1c == s2c)
continue;
// If they're different, check which one was larger
if (s1c > s2c)
return 1;
if (s1c < s2c)
return -1;
}
// If we got out here, then it looped through at least one of the strings
if (s1.Length > s2.Length)
return 1;
if (s1.Length < s2.Length)
return -1;
return 0;
}
}
#endregion
}
}

View File

@@ -1,4 +1,4 @@
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
/// <summary>
/// Different types of CMP rows being parsed

View File

@@ -4,7 +4,7 @@ using System.IO;
using System.Linq;
using System.Text;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
public class IniReader : IDisposable
{

View File

@@ -2,7 +2,7 @@
using System.IO;
using System.Text;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
public class IniWriter : IDisposable
{

View File

@@ -1,7 +1,7 @@
using System;
using System.IO;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
/// <summary>
/// A path that optionally contains a parent root

View File

@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net48;netcoreapp3.1;net5.0</TargetFrameworks>
<RuntimeIdentifiers>win10-x64;win7-x86</RuntimeIdentifiers>
<Configurations>Debug;Release</Configurations>
<Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)'=='net48'">
<DefineConstants>NET_FRAMEWORK</DefineConstants>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\SabreTools.Data\SabreTools.Data.csproj" />
<ProjectReference Include="..\SabreTools.Logging\SabreTools.Logging.csproj" />
</ItemGroup>
</Project>

View File

@@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
public class SeparatedValueReader : IDisposable
{

View File

@@ -2,7 +2,7 @@
using System.IO;
using System.Text;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
public class SeparatedValueWriter : IDisposable
{

View File

@@ -1,6 +1,6 @@
using System.Xml;
namespace SabreTools.Library.IO
namespace SabreTools.IO
{
/// <summary>
/// Additional methods for XmlTextWriter

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Text;
using SabreTools.Data;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -10,6 +10,7 @@ using System.Threading.Tasks;
using System.Xml.Serialization;
using SabreTools.Data;
using SabreTools.IO;
using SabreTools.Logging;
using SabreTools.Library.DatItems;
using SabreTools.Library.FileTypes;

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Linq;
using System.Text;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;

View File

@@ -9,9 +9,9 @@ using System.Threading.Tasks;
using System.Xml.Serialization;
using SabreTools.Data;
using SabreTools.IO;
using SabreTools.Logging;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Reports;
using NaturalSort;
using Newtonsoft.Json;

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Xml;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -6,6 +6,7 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Text;
using System.Xml;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Text;
using System.Xml;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Xml;
using SabreTools.IO;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;

View File

@@ -2,7 +2,7 @@
using System.IO;
using System.Text;
using SabreTools.Library.IO;
using SabreTools.IO;
namespace SabreTools.Library.FileTypes.CHD
{

View File

@@ -2,7 +2,7 @@
using System.IO;
using System.Text;
using SabreTools.Library.IO;
using SabreTools.IO;
namespace SabreTools.Library.FileTypes.CHD
{

View File

@@ -2,7 +2,7 @@
using System.IO;
using System.Text;
using SabreTools.Library.IO;
using SabreTools.IO;
namespace SabreTools.Library.FileTypes.CHD
{

View File

@@ -2,7 +2,7 @@
using System.IO;
using System.Text;
using SabreTools.Library.IO;
using SabreTools.IO;
namespace SabreTools.Library.FileTypes.CHD
{

View File

@@ -1,7 +1,7 @@
using System.IO;
using System.Text;
using SabreTools.Library.IO;
using SabreTools.IO;
namespace SabreTools.Library.FileTypes.CHD
{

View File

@@ -2,6 +2,7 @@
using System.IO;
using System.Text;
using SabreTools.IO;
using SabreTools.Library.FileTypes.CHD;
using SabreTools.Library.IO;

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using SabreTools.IO;
using SabreTools.Logging;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Text.RegularExpressions;
using SabreTools.Data;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Text.RegularExpressions;
using SabreTools.Data;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using SabreTools.IO;
using SabreTools.Logging;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;

View File

@@ -6,6 +6,7 @@ using System.Xml;
using System.Xml.Schema;
using SabreTools.Data;
using SabreTools.IO;
using SabreTools.Logging;
using SabreTools.Library.DatFiles;
using SabreTools.Library.FileTypes;

View File

@@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.IO;
using SabreTools.Data;
using SabreTools.IO;
using SabreTools.Logging;
using SabreTools.Library.DatFiles;
using SabreTools.Library.FileTypes;

View File

@@ -13,6 +13,7 @@
<ItemGroup>
<ProjectReference Include="..\SabreTools.Data\SabreTools.Data.csproj" />
<ProjectReference Include="..\SabreTools.IO\SabreTools.IO.csproj" />
<ProjectReference Include="..\SabreTools.Logging\SabreTools.Logging.csproj" />
<ProjectReference Include="..\SabreTools.Skippers\SabreTools.Skippers.csproj" />
</ItemGroup>

View File

@@ -24,6 +24,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Help", "SabreToo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Logging", "SabreTools.Logging\SabreTools.Logging.csproj", "{3D54D896-19F0-4723-B1E3-E40FAFE5A078}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.IO", "SabreTools.IO\SabreTools.IO.csproj", "{884163E0-1B61-468C-8839-7C67AB44EA3F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -88,6 +90,14 @@ Global
{3D54D896-19F0-4723-B1E3-E40FAFE5A078}.Release|Any CPU.Build.0 = Release|Any CPU
{3D54D896-19F0-4723-B1E3-E40FAFE5A078}.Release|x64.ActiveCfg = Release|Any CPU
{3D54D896-19F0-4723-B1E3-E40FAFE5A078}.Release|x64.Build.0 = Release|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Debug|x64.ActiveCfg = Debug|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Debug|x64.Build.0 = Debug|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Release|Any CPU.Build.0 = Release|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Release|x64.ActiveCfg = Release|Any CPU
{884163E0-1B61-468C-8839-7C67AB44EA3F}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -5,10 +5,10 @@ using System.Linq;
using System.Text.RegularExpressions;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.DatItems;
using SabreTools.Library.Filtering;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;
namespace SabreTools.Features

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.IO;
namespace SabreTools.Features

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.IO;
namespace SabreTools.Features

View File

@@ -2,9 +2,9 @@
using System.IO;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.FileTypes;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;
namespace SabreTools.Features

View File

@@ -3,9 +3,9 @@ using System.Threading.Tasks;
using SabreTools.Data;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;
namespace SabreTools.Features

View File

@@ -5,9 +5,9 @@ using System.Threading.Tasks;
using SabreTools.Data;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.DatItems;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;
namespace SabreTools.Features

View File

@@ -1,8 +1,8 @@
using System.Collections.Generic;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Library.DatFiles;
using SabreTools.Library.IO;
using SabreTools.Library.Tools;
namespace SabreTools.Features