diff --git a/Deheader/Headerer.cs b/Deheader/Headerer.cs
index 18489be1..f87aae69 100644
--- a/Deheader/Headerer.cs
+++ b/Deheader/Headerer.cs
@@ -244,7 +244,7 @@ namespace SabreTools
return false;
}
- // Otherwise, apply the rule ot the file
+ // Otherwise, apply the rule to the file
string newfile = file + ".new";
Skippers.TransformFile(file, newfile, rule, _logger);
diff --git a/SabreTools.Helper/Tools/DatTools.cs b/SabreTools.Helper/Tools/DatTools.cs
index f31b0f66..7a321490 100644
--- a/SabreTools.Helper/Tools/DatTools.cs
+++ b/SabreTools.Helper/Tools/DatTools.cs
@@ -1778,17 +1778,10 @@ namespace SabreTools.Helper
romtype, sgt, slt, seq, crc, md5, sha1, nodump, trim, single,
root, logger, true, clean, softlist, keepext:(innerDatdata.XSV != null));
- // If the extension matches, append ".new" to the filename
- string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat");
- if (outputDirectory == "" && Path.GetExtension(inputFileName) == extension)
- {
- innerDatdata.FileName += ".new";
- }
-
// If we have roms, output them
if (innerDatdata.Files.Count != 0)
{
- WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger);
+ WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger, overwrite: (outputDirectory == ""));
}
}
else if (Directory.Exists(inputFileName))
@@ -1803,17 +1796,10 @@ namespace SabreTools.Helper
innerDatdata = Parse(file, 0, 0, innerDatdata, gamename, romname, romtype, sgt,
slt, seq, crc, md5, sha1, nodump, trim, single, root, logger, true, clean, keepext:(datdata.XSV != null));
- // If the extension matches, append ".new" to the filename
- string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat");
- if (outputDirectory == "" && Path.GetExtension(file) == extension)
- {
- innerDatdata.FileName += ".new";
- }
-
// If we have roms, output them
if (innerDatdata.Files != null && innerDatdata.Files.Count != 0)
{
- WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger);
+ WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger, overwrite: (outputDirectory == ""));
}
}
}
@@ -2545,17 +2531,10 @@ namespace SabreTools.Helper
romtype, sgt, slt, seq, crc, md5, sha1, nodump, trim, single,
root, logger, true, clean, softlist, keepext: (innerDatdata.XSV != null));
- // If the extension matches, append ".new" to the filename
- string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat");
- if (outputDirectory == "" && Path.GetExtension(inputFileName) == extension)
- {
- innerDatdata.FileName += ".new";
- }
-
// If we have roms, output them
if (innerDatdata.Files.Count != 0)
{
- WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger);
+ WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger, overwrite: (outputDirectory == ""));
}
}
else if (Directory.Exists(inputFileName))
@@ -2572,17 +2551,10 @@ namespace SabreTools.Helper
innerDatdata = Parse(file, 0, 0, innerDatdata, gamename, romname, romtype, sgt,
slt, seq, crc, md5, sha1, nodump, trim, single, root, logger, true, clean, keepext: (datdata.XSV != null));
- // If the extension matches, append ".new" to the filename
- string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat");
- if (outputDirectory == "" && Path.GetExtension(file) == extension)
- {
- innerDatdata.FileName += ".new";
- }
-
// If we have roms, output them
if (innerDatdata.Files != null && innerDatdata.Files.Count != 0)
{
- WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger);
+ WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger, overwrite: (outputDirectory == ""));
}
});
}
@@ -2685,12 +2657,13 @@ namespace SabreTools.Helper
/// True if games should only be compared on game and file name (default), false if system and source are counted
/// True if DAT statistics should be output on write, false otherwise (default)
/// True if blank roms should be skipped on output, false otherwise (default)
+ /// True if files should be overwritten (default), false if they should be renamed instead
/// True if the DAT was written correctly, false otherwise
///
/// The following features have been requested for file output:
/// - Have the ability to strip special (non-ASCII) characters from rom information
///
- public static bool WriteDatfile(Dat datdata, string outDir, Logger logger, bool norename = true, bool stats = false, bool ignoreblanks = false)
+ public static bool WriteDatfile(Dat datdata, string outDir, Logger logger, bool norename = true, bool stats = false, bool ignoreblanks = false, bool overwrite = true)
{
// If there's nothing there, abort
if (datdata.Files == null || datdata.Files.Count == 0)
@@ -2760,7 +2733,7 @@ namespace SabreTools.Helper
SortedDictionary> sortable = BucketByGame(datdata.Files, datdata.MergeRoms, norename, logger);
// Get the outfile name
- Dictionary outfiles = Style.CreateOutfileNames(outDir, datdata);
+ Dictionary outfiles = Style.CreateOutfileNames(outDir, datdata, overwrite);
try
{
diff --git a/SabreTools.Helper/Tools/Style.cs b/SabreTools.Helper/Tools/Style.cs
index cc98e150..3ffbcdf9 100644
--- a/SabreTools.Helper/Tools/Style.cs
+++ b/SabreTools.Helper/Tools/Style.cs
@@ -152,8 +152,9 @@ namespace SabreTools.Helper
///
/// Output directory
/// DAT information
+ /// True if we ignore existing files (default), false otherwise
/// Dictionary of output formats mapped to file names
- public static Dictionary CreateOutfileNames(string outDir, Dat datdata)
+ public static Dictionary CreateOutfileNames(string outDir, Dat datdata, bool overwrite = true)
{
// Create the output dictionary
Dictionary outfileNames = new Dictionary();
@@ -167,39 +168,39 @@ namespace SabreTools.Helper
// Get the extensions from the output type
if ((datdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0)
{
- outfileNames.Add(OutputFormatFlag.Xml, CreateOutfileNamesHelper(outDir, ".xml", datdata));
+ outfileNames.Add(OutputFormatFlag.Xml, CreateOutfileNamesHelper(outDir, ".xml", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.ClrMamePro) != 0)
{
- outfileNames.Add(OutputFormatFlag.ClrMamePro, CreateOutfileNamesHelper(outDir, ".dat", datdata));
+ outfileNames.Add(OutputFormatFlag.ClrMamePro, CreateOutfileNamesHelper(outDir, ".dat", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.RomCenter) != 0)
{
- outfileNames.Add(OutputFormatFlag.RomCenter, CreateOutfileNamesHelper(outDir, ".rc.dat", datdata));
+ outfileNames.Add(OutputFormatFlag.RomCenter, CreateOutfileNamesHelper(outDir, ".rc.dat", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.DOSCenter) != 0)
{
- outfileNames.Add(OutputFormatFlag.DOSCenter, CreateOutfileNamesHelper(outDir, ".dc.dat", datdata));
+ outfileNames.Add(OutputFormatFlag.DOSCenter, CreateOutfileNamesHelper(outDir, ".dc.dat", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.MissFile) != 0)
{
- outfileNames.Add(OutputFormatFlag.MissFile, CreateOutfileNamesHelper(outDir, ".txt", datdata));
+ outfileNames.Add(OutputFormatFlag.MissFile, CreateOutfileNamesHelper(outDir, ".txt", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0)
{
- outfileNames.Add(OutputFormatFlag.SabreDat, CreateOutfileNamesHelper(outDir, ".sd.xml", datdata));
+ outfileNames.Add(OutputFormatFlag.SabreDat, CreateOutfileNamesHelper(outDir, ".sd.xml", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.RedumpMD5) != 0)
{
- outfileNames.Add(OutputFormatFlag.RedumpMD5, CreateOutfileNamesHelper(outDir, ".md5", datdata));
+ outfileNames.Add(OutputFormatFlag.RedumpMD5, CreateOutfileNamesHelper(outDir, ".md5", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.RedumpSHA1) != 0)
{
- outfileNames.Add(OutputFormatFlag.RedumpSHA1, CreateOutfileNamesHelper(outDir, ".sha1", datdata));
+ outfileNames.Add(OutputFormatFlag.RedumpSHA1, CreateOutfileNamesHelper(outDir, ".sha1", datdata, overwrite));
};
if ((datdata.OutputFormatFlag & OutputFormatFlag.RedumpSFV) != 0)
{
- outfileNames.Add(OutputFormatFlag.RedumpSFV, CreateOutfileNamesHelper(outDir, ".sfv", datdata));
+ outfileNames.Add(OutputFormatFlag.RedumpSFV, CreateOutfileNamesHelper(outDir, ".sfv", datdata, overwrite));
};
return outfileNames;
@@ -211,14 +212,27 @@ namespace SabreTools.Helper
/// Output directory
/// Extension to use for the file
/// DAT information
+ /// True if we ignore existing files, false otherwise
/// String containing the new filename
- private static string CreateOutfileNamesHelper(string outDir, string extension, Dat datdata)
+ private static string CreateOutfileNamesHelper(string outDir, string extension, Dat datdata, bool overwrite)
{
string filename = (String.IsNullOrEmpty(datdata.FileName) ? datdata.Description : datdata.FileName);
string outfile = outDir + filename + extension;
outfile = (outfile.Contains(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString()) ?
outfile.Replace(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString(), Path.DirectorySeparatorChar.ToString()) :
outfile);
+ if (!overwrite)
+ {
+ int i = 1;
+ while (File.Exists(outfile))
+ {
+ outfile = outDir + filename + "_" + i + extension;
+ outfile = (outfile.Contains(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString()) ?
+ outfile.Replace(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString(), Path.DirectorySeparatorChar.ToString()) :
+ outfile);
+ i++;
+ }
+ }
return outfile;
}
diff --git a/SimpleSort/SimpleSort.cs b/SimpleSort/SimpleSort.cs
index 615496e4..df83fd4e 100644
--- a/SimpleSort/SimpleSort.cs
+++ b/SimpleSort/SimpleSort.cs
@@ -571,7 +571,7 @@ namespace SabreTools
// If we have have a non-empty rule, apply it
if (rule.Tests != null && rule.Tests.Count != 0)
{
- // Otherwise, apply the rule ot the file
+ // Otherwise, apply the rule to the file
string newinput = input + ".new";
Skippers.TransformFile(input, newinput, rule, _logger);
Rom drom = FileTools.GetSingleFileInfo(newinput);