public void LoadArchive(string aArchiveName, bool aLoadData)
 {
     this.EntriesA.Clear();
     using (Archive2Interop.Archive archive = new Archive2Interop.Archive(FileFormat.General, this.chunkStorageType))
     {
         archive.ReadFromArchive(aArchiveName, aLoadData);
         foreach (FileBase aFile in archive)
         {
             this.AddArchiveFile(aFile, aArchiveName, aLoadData);
         }
         this.ArchiveFormat = archive.Format;
     }
     this.isOpenedArchive = true;
 }
        public void SaveArchive(string asArchiveName, bool abWriteStringTable)
        {
            ulong  aSizeLimitBytes = (int)this.ArchiveCount != 0 || this.isOpenedArchive ? Archive2Interop.Archive.UnlimitedSizeS : this.MaxArchiveSize;
            string format          = (int)this.ArchiveCount == 0 || this.ArchiveCount >= 10U ? "{0}{1:D2}{2}" : "{0}{1}{2}";
            uint   num1            = (int)this.ArchiveCount == 0 || this.isOpenedArchive ? 0U : (uint)Math.Ceiling((double)this.EntriesA.Count / (double)this.ArchiveCount);

            using (Archive2Interop.Archive archive = new Archive2Interop.Archive(this.ArchiveFormat, this.chunkStorageType, aSizeLimitBytes))
            {
                string str           = Path.ChangeExtension(asArchiveName, (string)null);
                string extension     = Path.GetExtension(asArchiveName);
                string directoryName = Path.GetDirectoryName(asArchiveName);
                if (!string.IsNullOrEmpty(directoryName))
                {
                    Directory.CreateDirectory(directoryName);
                }
                int num2 = 1;
                int num3 = 0;
                this.PreLoadArchiveFiles();
                bool flag1     = true;
                int  aNextFile = 0;
                while (flag1)
                {
                    FileBase[] fileBaseArray = this.ConvertFileBatch(100, ref aNextFile);
                    flag1 = fileBaseArray != null;
                    if (flag1)
                    {
                        foreach (FileBase fileBase in fileBaseArray)
                        {
                            if (fileBase != null)
                            {
                                string resourceIdCollision = archive.GetResourceIDCollision(fileBase);
                                if (string.IsNullOrEmpty(resourceIdCollision))
                                {
                                    bool flag2 = false;
                                    if ((int)num1 != 0)
                                    {
                                        if ((long)num3 >= (long)num1)
                                        {
                                            flag2 = true;
                                            goto label_13;
                                        }
                                    }
                                    try
                                    {
                                        archive.AddFile(fileBase);
                                    }
                                    catch (ArchiveFullException ex)
                                    {
                                        flag2 = true;
                                    }
label_13:
                                    if (flag2)
                                    {
                                        archive.WriteToDisk(string.Format(format, (object)str, (object)num2, (object)extension), abWriteStringTable);
                                        ++num2;
                                        num3 = 0;
                                        archive.RemoveAllFiles();
                                        archive.AddFile(fileBase);
                                    }
                                    ++num3;
                                }
                                else
                                {
                                    this.ErrorDelegate(string.Format("Resource ID collision between \"{0}\" (skipped) and \"{1}\"", (object)fileBase.Name, (object)resourceIdCollision));
                                }
                            }
                        }
                    }
                }
                if (archive.GetFileCount() <= 0U)
                {
                    return;
                }
                string asArchiveFile = num2 != 1 ? string.Format(format, (object)str, (object)num2, (object)extension) : string.Format("{0}{1}", (object)str, (object)extension);
                archive.WriteToDisk(asArchiveFile, abWriteStringTable);
            }
        }