Example #1
0
        public static T ReadBinary <T>(this IConversionSupport conversionSupport, string filePath, ReadingOptions readingOptions) where T : IConversionSupport
        {
            if (new FileInfo(filePath).Length > int.MaxValue)
            {
                throw new Exception("Input file is too large.");
            }

            Stream stream;

            if (readingOptions.UsesMemoryMapping)
            {
                MemoryMappedFile memoryMappedFile = MemoryMappedFile.CreateFromFile(filePath);
                stream = memoryMappedFile.CreateViewStream();
            }
            else
            {
                stream = new MemoryStream(File.ReadAllBytes(filePath));
            }

            using (ArkArchive archive = new ArkArchive(stream)) {
                conversionSupport.ReadBinary(archive, readingOptions);
            }

            return((T)conversionSupport);
        }
Example #2
0
        public static void WriteBinary(this IConversionSupport conversionSupport, string filePath, WritingOptions writingOptions)
        {
            int size = conversionSupport.CalculateSize();

            Stream stream;

            if (writingOptions.UsesMemoryMapping)
            {
                File.Create(filePath).Dispose();
                MemoryMappedFile memoryMappedFile = MemoryMappedFile.CreateFromFile(filePath, FileMode.Open, null, size, MemoryMappedFileAccess.Write);
                stream = memoryMappedFile.CreateViewStream();
            }
            else
            {
                stream = new MemoryStream(new byte[size], true);
            }

            using (ArkArchive archive = new ArkArchive(stream)) {
                conversionSupport.WriteBinary(archive, writingOptions);

                if (!writingOptions.UsesMemoryMapping)
                {
                    using (FileStream file = File.Create(filePath)) {
                        stream.Position = 0;
                        stream.CopyTo(file);
                    }
                }
            }
        }