private bool WriteMapFile()
{
if (LogManager != null) {
LogManager.Debug("Writing map file...");
}
if (!_IsOpened && !(Access == FileAccess.ReadWrite || Access == FileAccess.Write)) {
if (LogManager != null) {
LogManager.Error("Writing map file failed: Archieve not opened or no write access");
}
return false;
}
ArchiveEntries.Sort((s1, s2) => s1.Id.CompareTo(s2.Id));
try {
MapWriter.BaseStream.SetLength(0);
MapWriter.Seek(0, SeekOrigin.Begin);
MapWriter.Write(ArchiveHeader);
MapWriter.Write((uint)ArchiveEntries.Count);
foreach (FileEntry entry in ArchiveEntries) {
MapWriter.Write(1);
MapWriter.Write(entry.SizeCurrent);
MapWriter.Write(entry.SizeAvailable);
MapWriter.Write(entry.Id);
MapWriter.Write(entry.Offset);
}
} catch (Exception ex) {
if (LogManager != null) {
LogManager.Error("Writing map file failed.", ex);
}
throw;
}
return true;
}