diff --git a/SabreTools.Helper/Dats/DatFile.cs b/SabreTools.Helper/Dats/DatFile.cs
index 3f435cc8..d85d7c79 100644
--- a/SabreTools.Helper/Dats/DatFile.cs
+++ b/SabreTools.Helper/Dats/DatFile.cs
@@ -5,7 +5,7 @@ using SabreTools.Helper.Data;
namespace SabreTools.Helper.Dats
{
- public partial class DatFile : ICloneable
+ public partial class DatFile
{
#region Private instance variables
@@ -486,43 +486,52 @@ namespace SabreTools.Helper.Dats
#endregion
- #region Cloning Methods [MODULAR DONE]
+ #region Constructors
- public object Clone()
+ ///
+ /// Create a new, empty DatFile object
+ ///
+ public DatFile()
{
- return new DatFile
- {
- FileName = _fileName,
- Name = _name,
- Description = _description,
- RootDir = _rootDir,
- Category = _category,
- Version = _version,
- Date = _date,
- Author = _author,
- Email = _email,
- Homepage = _homepage,
- Url = _url,
- Comment = _comment,
- Header = _header,
- Type = _type,
- ForceMerging = _forceMerging,
- ForceNodump = _forceNodump,
- ForcePacking = _forcePacking,
- ExcludeOf = _excludeOf,
- DatFormat = _datFormat,
- MergeRoms = _mergeRoms,
- SortedBy = SortedBy.Default,
- UseGame = _useGame,
- Prefix = _prefix,
- Postfix = _postfix,
- Quotes = _quotes,
- RepExt = _repExt,
- AddExt = _addExt,
- RemExt = _remExt,
- GameName = _gameName,
- Romba = _romba,
- };
+ _files = new SortedDictionary>();
+ }
+
+ ///
+ /// Create a new DatFile from an existing one
+ ///
+ ///
+ public DatFile(DatFile datFile)
+ {
+ _fileName = datFile.FileName;
+ _name = datFile.Name;
+ _description = datFile.Description;
+ _rootDir = datFile.RootDir;
+ _category = datFile.Category;
+ _version = datFile.Version;
+ _date = datFile.Date;
+ _author = datFile.Author;
+ _email = datFile.Email;
+ _homepage = datFile.Homepage;
+ _url = datFile.Url;
+ _comment = datFile.Comment;
+ _header = datFile.Header;
+ _type = datFile.Type;
+ _forceMerging = datFile.ForceMerging;
+ _forceNodump = datFile.ForceNodump;
+ _forcePacking = datFile.ForcePacking;
+ _excludeOf = datFile.ExcludeOf;
+ _datFormat = datFile.DatFormat;
+ _mergeRoms = datFile.MergeRoms;
+ _sortedBy = SortedBy.Default;
+ _useGame = datFile.UseGame;
+ _prefix = datFile.Prefix;
+ _postfix = datFile.Postfix;
+ _quotes = datFile.Quotes;
+ _repExt = datFile.RepExt;
+ _addExt = datFile.AddExt;
+ _remExt = datFile.RemExt;
+ _gameName = datFile.GameName;
+ _romba = datFile.Romba;
}
#endregion
diff --git a/SabreTools.Helper/Dats/Partials/DatFile.ConvertUpdate.cs b/SabreTools.Helper/Dats/Partials/DatFile.ConvertUpdate.cs
index 3d84fada..b06a8d9e 100644
--- a/SabreTools.Helper/Dats/Partials/DatFile.ConvertUpdate.cs
+++ b/SabreTools.Helper/Dats/Partials/DatFile.ConvertUpdate.cs
@@ -157,7 +157,7 @@ namespace SabreTools.Helper.Dats
if ((diff & DiffMode.NoDupes) != 0)
{
post = " (No Duplicates)";
- outerDiffData = (DatFile)Clone();
+ outerDiffData = new DatFile(this);
outerDiffData.FileName += post;
outerDiffData.Name += post;
outerDiffData.Description += post;
@@ -168,7 +168,7 @@ namespace SabreTools.Helper.Dats
if ((diff & DiffMode.Dupes) != 0)
{
post = " (Duplicates)";
- dupeData = (DatFile)Clone();
+ dupeData = new DatFile(this);
dupeData.FileName += post;
dupeData.Name += post;
dupeData.Description += post;
@@ -186,7 +186,7 @@ namespace SabreTools.Helper.Dats
Parallel.For(0, inputs.Count, j =>
{
string innerpost = " (" + Path.GetFileNameWithoutExtension(inputs[j].Split('¬')[0]) + " Only)";
- DatFile diffData = (DatFile)Clone();
+ DatFile diffData = new DatFile(this);
diffData.FileName += innerpost;
diffData.Name += innerpost;
diffData.Description += innerpost;
@@ -319,7 +319,7 @@ namespace SabreTools.Helper.Dats
}
else
{
- diffData = (DatFile)Clone();
+ diffData = new DatFile(this);
diffData.FileName += post;
diffData.Name += post;
diffData.Description += post;
@@ -459,7 +459,7 @@ namespace SabreTools.Helper.Dats
if (File.Exists(inputFileName))
{
- DatFile innerDatdata = (DatFile)Clone();
+ DatFile innerDatdata = new DatFile(this);
logger.User("Processing \"" + Path.GetFileName(inputFileName) + "\"");
innerDatdata.Parse(inputFileName, 0, 0, filter, trim, single,
root, logger, true, clean, softlist,
@@ -480,7 +480,7 @@ namespace SabreTools.Helper.Dats
file =>
{
logger.User("Processing \"" + Path.GetFullPath(file).Remove(0, inputFileName.Length) + "\"");
- DatFile innerDatdata = (DatFile)Clone();
+ DatFile innerDatdata = new DatFile(this);
innerDatdata.Parse(file, 0, 0, filter,
trim, single, root, logger, true, clean, softlist,
keepext: ((innerDatdata.DatFormat & DatFormat.TSV) != 0 || (innerDatdata.DatFormat & DatFormat.CSV) != 0));
diff --git a/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs b/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs
index 5c1a2782..4289a07f 100644
--- a/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs
+++ b/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs
@@ -511,7 +511,7 @@ namespace SabreTools.Helper.Dats
}
// Setup the fixdat
- DatFile matched = (DatFile)Clone();
+ DatFile matched = new DatFile(this);
matched.Reset();
matched.FileName = "fixDat_" + matched.FileName;
matched.Name = "fixDat_" + matched.Name;
diff --git a/SabreTools.Helper/Dats/Partials/DatFile.Splitters.cs b/SabreTools.Helper/Dats/Partials/DatFile.Splitters.cs
index 7e9aa9ae..b26799cc 100644
--- a/SabreTools.Helper/Dats/Partials/DatFile.Splitters.cs
+++ b/SabreTools.Helper/Dats/Partials/DatFile.Splitters.cs
@@ -337,7 +337,7 @@ namespace SabreTools.Helper.Dats
BucketByGame(false, true, logger, output: false, lower: false);
// Create a temporary DAT to add things to
- DatFile tempDat = (DatFile)Clone();
+ DatFile tempDat = new DatFile(this);
tempDat.Name = null;
// Sort the input keys
@@ -354,7 +354,7 @@ namespace SabreTools.Helper.Dats
SplitByLevelHelper(tempDat, outDir, shortname, basedat, logger);
// Reset the DAT for the next items
- tempDat = (DatFile)Clone();
+ tempDat = new DatFile(this);
tempDat.Name = null;
}
diff --git a/SabreTools/Partials/SabreTools_Inits.cs b/SabreTools/Partials/SabreTools_Inits.cs
index 91384701..63cff6e3 100644
--- a/SabreTools/Partials/SabreTools_Inits.cs
+++ b/SabreTools/Partials/SabreTools_Inits.cs
@@ -113,7 +113,7 @@ namespace SabreTools
if (Directory.Exists(path) || File.Exists(path))
{
// Clone the base Dat for information
- DatFile datdata = (DatFile)basedat.Clone();
+ DatFile datdata = new DatFile(basedat);
string basePath = Path.GetFullPath(path);
bool success = datdata.PopulateFromDir(basePath, noMD5, noSHA1, removeDateFromAutomaticName, parseArchivesAsFiles, enableGzip,