コード例 #1
0
 public void CommitToIMGFile()
 {
     InitializeIMGArchives();
     if (File.Exists(testDotThreeDotIMGFilePath))
     {
         File.Delete(testDotThreeDotIMGFilePath);
     }
     File.Copy(testDotOneDotIMGFilePath, testDotThreeDotIMGFilePath);
     using (IIMGArchive archive = IMGFile.Open(testDotThreeDotIMGFilePath, EIMGArchiveAccessMode.Update))
     {
         string entry_name = string.Empty;
         long   entry_size = 0;
         Assert.IsNotNull(archive);
         IReadOnlyDictionary <string, IIMGArchiveEntry> entries = archive.Entries;
         int entry_count = entries.Count;
         Assert.Less(0, entry_count);
         foreach (IIMGArchiveEntry entry in entries.Values)
         {
             entry_name = entry.FullName;
             Debug.WriteLine($"Unpacking file \"{ entry.FullName }\"");
             if (!(Directory.Exists("test")))
             {
                 Directory.CreateDirectory("test");
             }
             using (IIMGArchiveEntryStream img_archive_entry_stream = entry.Open())
             {
                 Assert.IsNotNull(img_archive_entry_stream);
                 entry_size = img_archive_entry_stream.Stream.Length;
                 Assert.AreEqual(entry_size, (long)(entry.Length));
                 img_archive_entry_stream.Stream.Seek(0L, SeekOrigin.End);
                 using (BinaryWriter img_archive_entry_stream_binary_writer = new BinaryWriter(img_archive_entry_stream.Stream, archive.EntryNameEncoding, true))
                 {
                     byte[] zero_bytes = new byte[2048];
                     img_archive_entry_stream_binary_writer.Write(zero_bytes);
                     img_archive_entry_stream_binary_writer.Flush();
                     entry_size += zero_bytes.Length;
                 }
             }
             break;
         }
         if (entry_count > 0)
         {
             entries = archive.Entries;
             Assert.AreEqual(entry_count, entries.Count);
             IIMGArchiveEntry another_entry = archive.GetEntry(entry_name);
             Assert.IsNotNull(another_entry);
             using (IIMGArchiveEntryStream img_archive_entry_stream = another_entry.Open())
             {
                 Assert.AreEqual(entry_size, img_archive_entry_stream.Stream.Length);
                 Assert.AreEqual(entry_size, another_entry.Length);
                 if (entry_size >= 2048)
                 {
                     entry_size -= 2048;
                     img_archive_entry_stream.Stream.SetLength(entry_size);
                 }
             }
         }
     }
 }