public void ExtractFileNameForMegFileTest(string s) { Regex regularExpression = new Regex(DATA_PATH_REG_EX); string generatedPath = MegFileContentUtility.ExtractFileNameForMegFile(s); Match match = regularExpression.Match(generatedPath); Assert.IsTrue(match.Success); }
private static MegFileNameTable BuildFileNameTable(MegFileAttribute megFileAttribute) { List <string> actualFiles = new List <string>(); List <MegFileNameTableRecord> megFileNameList = new List <MegFileNameTableRecord>(); foreach (string file in megFileAttribute.ContentFiles) { try { string fileName = MegFileContentUtility.ExtractFileNameForMegFile(file); MegFileNameTableRecord megFileNameTableRecord = new MegFileNameTableRecord(fileName); megFileNameList.Add(megFileNameTableRecord); actualFiles.Add(file); } catch (Exception e) { Console.Error.WriteLine($"File {file} is invalid. {e}"); } } megFileAttribute.ContentFiles = actualFiles; return(new MegFileNameTable(megFileNameList)); }
internal static void PackMegFile(string fullyQualifiedMegFileSavePath, IEnumerable <string> absoluteFilePaths) { if (fullyQualifiedMegFileSavePath == null) { throw new ArgumentNullException(nameof(fullyQualifiedMegFileSavePath)); } if (absoluteFilePaths == null) { throw new ArgumentNullException(nameof(absoluteFilePaths)); } if (!PathUtility.IsValidDirectoryPath(fullyQualifiedMegFileSavePath)) { throw new ArgumentException($"The provided path {fullyQualifiedMegFileSavePath} does not exist."); } IEnumerable <string> contentFiles = absoluteFilePaths.ToList(); if (!contentFiles.Any()) { throw new ArgumentException($"The meg file must contain at least one file."); } MegFileBinaryFileBuilder builder = new MegFileBinaryFileBuilder(); MegFile megFile = builder.Build(new MegFileAttribute() { ContentFiles = contentFiles }); using (BinaryWriter writer = new BinaryWriter(File.Open(fullyQualifiedMegFileSavePath, FileMode.Create))) { writer.Write(megFile.GetBytes()); } foreach (string megFileFile in megFile.ContentTable .MegFileContentTableRecords.SelectMany(contentTableMegFileContentTableRecord => megFile.Files.Where(megFileFile => megFile .LookupFileNameByIndex( Convert.ToInt32(contentTableMegFileContentTableRecord.FileNameTableRecordIndex)) .Equals(MegFileContentUtility.ExtractFileNameForMegFile(megFileFile), StringComparison.InvariantCultureIgnoreCase)))) { using (FileStream readStream = File.OpenRead(megFileFile)) { using (FileStream writeStream = new FileStream(fullyQualifiedMegFileSavePath, FileMode.Append, FileAccess.Write, FileShare.None)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = readStream.Read(buffer, 0, 1024)) > 0) { writeStream.Write(buffer, 0, bytesRead); } } } } }