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); } }