diff --git a/RombaSharp/Partials/RombaSharp_Helpers.cs b/RombaSharp/Partials/RombaSharp_Helpers.cs index f38ae571..0ddfcad7 100644 --- a/RombaSharp/Partials/RombaSharp_Helpers.cs +++ b/RombaSharp/Partials/RombaSharp_Helpers.cs @@ -295,6 +295,42 @@ namespace SabreTools _logger.User("User Processor Time: " + proc.UserProcessorTime); } + /// + /// Export the current database to CSV + /// + private static void ExportDatabase() + { + SqliteConnection dbc = new SqliteConnection(_connectionString); + dbc.Open(); + StreamWriter sw = new StreamWriter(File.Open("export.csv", FileMode.Create, FileAccess.Write)); + + sw.WriteLine("\"ID\",\"Size\",\"CRC\",\"MD5\",\"SHA-1\",\"In Depot\",\"DAT Hash\""); + + string query = "SELECT dats.id, size, crc, md5, sha1, indepot, hash FROM data JOIN dats ON data.id=dats.id"; + SqliteCommand slc = new SqliteCommand(query, dbc); + SqliteDataReader sldr = slc.ExecuteReader(); + + if (sldr.HasRows) + { + while (sldr.Read()) + { + string line = "\"" + sldr.GetInt32(0) + "\"," + + "\"" + sldr.GetInt64(1) + "\"," + + "\"" + sldr.GetString(2) + "\"," + + "\"" + sldr.GetString(3) + "\"," + + "\"" + sldr.GetString(4) + "\"," + + "\"" + sldr.GetInt32(5) + "\"," + + "\"" + sldr.GetString(6) + "\""; + sw.WriteLine(line); + } + } + + sldr.Dispose(); + slc.Dispose(); + sw.Dispose(); + dbc.Dispose(); + } + /// /// Moves DAT index entries for orphaned DATs to backup folder /// diff --git a/RombaSharp/RombaSharp.cs b/RombaSharp/RombaSharp.cs index cb79cc70..05e2e957 100644 --- a/RombaSharp/RombaSharp.cs +++ b/RombaSharp/RombaSharp.cs @@ -75,6 +75,7 @@ namespace SabreTools dbstats = false, diffdat = false, dir2dat = false, + export = false, fixdat = false, lookup = false, memstats = false, @@ -117,6 +118,9 @@ namespace SabreTools case "dir2dat": dir2dat = true; break; + case "export": + export = true; + break; case "fixdat": fixdat = true; break; @@ -176,8 +180,8 @@ namespace SabreTools } // If more than one switch is enabled, show the help screen - if (!(archive ^ build ^ dbstats ^ diffdat ^ dir2dat ^ fixdat ^ lookup ^ memstats ^ miss ^ - progress ^ purgeBackup ^ purgeDelete ^ refreshDats ^ shutdown)) + if (!(archive ^ build ^ dbstats ^ diffdat ^ dir2dat ^ export ^ fixdat ^ lookup ^ memstats ^ + miss ^ progress ^ purgeBackup ^ purgeDelete ^ refreshDats ^ shutdown)) { _logger.Error("Only one feature switch is allowed at a time"); Build.Help(); @@ -226,6 +230,12 @@ namespace SabreTools InitDir2Dat(inputs); } + // Export the database to file + else if (export) + { + ExportDatabase(); + } + // For each specified DAT file it creates a fix DAT else if (fixdat) { diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index 00e2d596..72b99e43 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -89,6 +89,7 @@ namespace SabreTools.Helper helptext.Add(" -new= DAT to compare to"); helptext.Add(" dir2dat Creates a DAT file for the specified input directory"); helptext.Add(" -out= Filename to save out to"); + helptext.Add(" export Exports db to export.csv"); helptext.Add(" fixdat For each specified DAT file it creates a fix DAT"); helptext.Add(" lookup For each specified hash, look up available information"); helptext.Add(" memstats Prints memory stats");