internal static Darc InsertFiles(Darc orig, string folderName) { string[] fileNames = new string[orig.Entries.Length]; for (int i = 0; i < fileNames.Length; i++) { fileNames[i] = orig.FileNameTable[i].FileName; } string[] files = Directory.GetFiles(folderName, "*", SearchOption.AllDirectories); foreach (string file in files) { FileInfo fi = new FileInfo(file); string fileName = fi.Name; // Get Index of file int index = Array.IndexOf(fileNames, fileName); if (orig.Entries[index].IsFolder) { throw new Exception(file + " is not a valid file to reinsert!"); } Darc.InsertFile(ref orig, index, file); } // Fix Data layout Array.Resize(ref orig.Data, orig.Data.Length % 4 == 0 ? orig.Data.Length : orig.Data.Length + 4 - orig.Data.Length % 4); orig.Header.FileSize = (uint)(orig.Data.Length + orig.Header.FileDataOffset); return(orig); }
internal static bool InsertFile(ref Darc orig, int index, string path) { try { return(Darc.InsertFile(ref orig, index, File.ReadAllBytes(path))); } catch (Exception) { return(false); } }