Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
                        }
                    }
                }
            }
        }