/// <summary> /// Detect and replace header(s) to the given file /// </summary> /// <param name="file">Name of the file to be parsed</param> /// <param name="outDir">Output directory to write the file to, empty means the same directory as the input file</param> /// <returns>True if a header was found and appended, false otherwise</returns> public static bool RestoreHeader(string file, string outDir) { // Create the output directory if it doesn't exist if (!string.IsNullOrWhiteSpace(outDir) && !Directory.Exists(outDir)) Directory.CreateDirectory(outDir); // First, get the SHA-1 hash of the file BaseFile baseFile = FileExtensions.GetInfo(file, hashes: Hash.SHA1, asFiles: TreatAsFile.NonArchive); // Retrieve a list of all related headers from the database List<string> headers = DatabaseTools.RetrieveHeadersFromDatabase(Utilities.ByteArrayToString(baseFile.SHA1)); // If we have nothing retrieved, we return false if (headers.Count == 0) return false; // Now loop through and create the reheadered files, if possible for (int i = 0; i < headers.Count; i++) { string outputFile = (string.IsNullOrWhiteSpace(outDir) ? $"{Path.GetFullPath(file)}.new" : Path.Combine(outDir, Path.GetFileName(file))) + i; logger.User($"Creating reheadered file: {outputFile}"); FileExtensions.AppendBytes(file, outputFile, Utilities.StringToByteArray(headers[i]), null); logger.User("Reheadered file created!"); } return true; }