Exemple #1
0
        /// <summary>
        /// Экспортирует файл из архива
        /// </summary>
        /// <param name="entry"></param>
        /// <param name="destination"></param>
        public void ExtractFile(GameFile entry, string destination)
        {
            Stream stream = entry.GetStream(FileMode.Open, FileAccess.Read);
            FileStream destinationFile = new FileStream(destination, FileMode.Create, FileAccess.Write);
            byte[] buf = new byte[SECTOR_SIZE];

            while (stream.Position < stream.Length)
            {
                int read = stream.Read(buf, 0, SECTOR_SIZE);
                destinationFile.Write(buf, 0, read);
            }

            destinationFile.Flush();
            destinationFile.Close();
            stream.Close();
        }
Exemple #2
0
        /// <summary>
        /// Deletes <see cref="GameFile"/> from the current <see cref="ArchiveFile"/>
        /// </summary>
        /// <summary xml:lang="ru">
        /// Удаляет файл <see cref="GameFile"/> из текущего архива <see cref="ArchiveFile"/>
        /// </summary>
        /// <param name="entry"><see cref="GameFile"/> to be deleted</param>
        /// <param name="entry" xml:lang="ru">Файл <see cref="GameFile"/>, который необходимо удалить</param>
        public void DeleteFile(GameFile entry)
        {
            // We don't really know if we need to actually remove the file itself.
            // Maybe it is not needed here and we can just remove entry
            // just like in regular file system.
            // I'll leave this code commented here. Maybe we'll do this as a feature
            // with a flag. Who knows.
            /*Stream destinationStream = GetStream(FileMode.Open, FileAccess.Write);

            destinationStream.Seek(entry.Offset, SeekOrigin.Begin);

            while (destinationStream.Position < entry.Offset + entry.Length)
            {
                byte[] buf = new byte[SECTOR_SIZE];
                destinationStream.Write(buf, 0, SECTOR_SIZE);
            }

            destinationStream.Close();*/

            DeleteFileEntry(entry);
        }
Exemple #3
0
        /// <summary>
        /// Inserts new <see cref="GameFile"/> into current <see cref="ArchiveFile"/>
        /// </summary>
        /// <summary xml:lang="ru">
        /// Добавляет новый файл <see cref="GameFile"/> в текущий архив <see cref="ArchiveFile"/>
        /// </summary>
        /// <param name="sourceFile"><see cref="GameFile"/> to be inserted into the <see cref="ArchiveFile"/></param>
        /// <param name="sourceFile" xml:lang="ru">Файл <see cref="GameFile"/>, который необходимо добавить в архив <see cref="ArchiveFile"/></param>
        public void InsertFile(GameFile sourceFile)
        {
            int offset = CalculateOffsetForNewEntry();
            AddNewFileEntry(offset, sourceFile);
            
            Stream sourceStream = sourceFile.GetStream(FileMode.Open, FileAccess.Read);
            Stream destinationStream = GetStream(FileMode.Open, FileAccess.Write);
            byte[] buf;

            destinationStream.Seek(offset, SeekOrigin.Begin);

            while (sourceStream.Position < sourceStream.Length)
            {
                buf = new byte[SECTOR_SIZE];
                int read = sourceStream.Read(buf, 0, SECTOR_SIZE);
                destinationStream.Write(buf, 0, SECTOR_SIZE);
            }

            destinationStream.Flush();
            destinationStream.Close();
            sourceStream.Close();
        }
Exemple #4
0
 /// <summary>
 /// Deletes the table of contents entry for the <see cref="GameFile"/> from the current <see cref="ArchiveFile"/>
 /// </summary>
 /// <summary xml:lang="ru">
 /// Удаляет запись о файле <see cref="GameFile"/> из текущего архива <see cref="ArchiveFile"/>
 /// </summary>
 /// <param name="file"><see cref="GameFile"/> which entry needs to be deleted</param>
 /// <param name="file" xml:lang="ru">Файл <see cref="GameFile"/>, запись которого необходимо удалить</param>
 public abstract void DeleteFileEntry(GameFile file);
Exemple #5
0
 /// <summary>
 /// Adds new table of contents entry for the new <paramref name="file"/> in defined <paramref name="offset"/> to the <see cref="ArchiveFile"/>
 /// </summary>
 /// <summary xml:lang="ru">
 /// Добавляет новую запись о файле <paramref name="file"/> в таблицу размещения файлов в архиве <see cref="ArchiveFile"/> с заданным смещением <paramref name="offset"/>
 /// </summary>
 /// <param name="offset">Starting offset of a <paramref name="file"/></param>
 /// <param name="offset" xml:lang="ru">Смещение начала файла <paramref name="file"/></param>
 /// <param name="file"><see cref="GameFile"/> that needs new entry to be defined</param>
 /// <param name="file" xml:lang="ru">Файл <see cref="GameFile"/>, запись о котором необходимо добавить в таблицу</param>
 /// <returns><see cref="GameFile"/> entry for a new file</returns>
 public abstract GameFile AddNewFileEntry(int offset, GameFile file);
Exemple #6
0
 /// <summary>
 /// Renames <paramref name="entry"/> to <paramref name="newName"/> in the current <see cref="ArchiveFile"/>
 /// </summary>
 /// <summary xml:lang="ru">
 /// Переименовывает файл <paramref name="entry"/> в <paramref name="newName"/> в текущем архиве <see cref="ArchiveFile"/>
 /// </summary>
 /// <param name="entry"><see cref="GameFile"/> to be renamed</param>
 /// <param name="entry" xml:lang="ru">Файл <see cref="GameFile"/>, который необходимо переименовать</param>
 /// <param name="newName">New file name</param>
 /// <param name="newName" xml:lang="ru">Новое имя файла</param>
 /// <remarks>
 /// This function is not implemented yet.
 /// </remarks>
 /// <remarks xml:lang="ru">
 /// Эта функция ещё не реализована.
 /// </remarks>
 public void RenameFile(GameFile entry, string newName) { }
Exemple #7
0
 /// <summary>
 /// Replaces <paramref name="oldEntry"/> in the <see cref="ArchiveFile"/> with new file <paramref name="newEntry"/>
 /// </summary>
 /// <summary xml:lang="ru">
 /// Заменяет файл <paramref name="oldEntry"/> в архиве <see cref="ArchiveFile"/> на новый файл <paramref name="newEntry"/>
 /// </summary>
 /// <param name="oldEntry">Old <see cref="GameFile"/> in the <see cref="ArchiveFile"/> that needs to be replaced</param>
 /// <param name="oldEntry" xml:lang="ru">Старый файл <see cref="GameFile"/> в архиве <see cref="ArchiveFile"/>, который нужно заменить</param>
 /// <param name="newEntry">A replacement <see cref="GameFile"/> for the <paramref name="oldEntry"/></param>
 /// <param name="newEntry" xml:lang="ru">Новый файл <see cref="GameFile"/>, которым необходимо заменить <paramref name="oldEntry"/></param>
 /// <remarks>
 /// This function is not implemented yet.
 /// </remarks>
 /// <remarks xml:lang="ru">
 /// Эта функция ещё не реализована.
 /// </remarks>
 public void ReplaceFile(GameFile oldEntry, GameFile newEntry) { }