PckPacker
Записывает файлы и записи удаления в PCK с явным завершением.
Последовательность: PckStart → AddFile или AddFileFromBuffer → Flush. Проверяйте Error после каждого шага. Упаковщик переносит байты, а не выполняет импорт и экспорт ресурсов проекта. Для ZIP используйте ZipPacker.
Пример создаёт пакет с одним UTF-8 файлом; выходная папка должна существовать. Запись не атомарна: при ошибке частичный файл не удаляется автоматически.
using System.Text;
using Reckfell;
public static class PackBuildExample
{
public static Error WriteTextPack(string outputPath, string text)
{
using var pack = new PckPacker();
Error error = pack.PckStart(outputPath);
if (error != Error.Ok)
return error;
error = pack.AddFileFromBuffer("asset://Extra/message.txt", Encoding.UTF8.GetBytes(text));
if (error != Error.Ok)
return error;
return pack.Flush();
}
}Подключение, порядок патчей и кэш разобраны в руководстве PCK/ZIP.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
PckPackerКонструктор
public PckPacker();Создаёт упаковщик без открытого файла. Вызовите PckStart, добавьте файлы и явно проверьте результат Flush. Используйте using для освобождения упаковщика.
Методы6
AddFileError
public Error AddFile(string targetPath, string sourcePath, bool encrypt = false);Читает sourcePath и сразу записывает его байты в открытый пакет под логическим targetPath. Не импортирует исходные модели, не ищет зависимости и не выполняет экспорт проекта. Перед вызовом нужен успешный PckStart; после добавления нужен Flush.
| Имя | Тип | По умолчанию |
|---|---|---|
targetPath | string | — |
sourcePath | string | — |
encrypt | bool | false |
targetPathЛогический путь внутри пакета. Префикс asset:// необязателен и удаляется при записи; это не имя выходного PCK.
sourcePathПуть существующего читаемого файла через FileAccess. В пакет копируются его текущие байты, а не ссылка на файл.
encryptШифровать байты этого файла ключом из PckStart. Не меняет флаг шифрования каталога.
ErrorError.Ok при успешном выполнении; иначе код ошибки. Проверяйте его до следующего шага; ошибка не означает автоматического удаления частичного файла.
AddFileFromBuffer2 перегрузки
public Error AddFileFromBuffer(string targetPath, byte[] data, bool encrypt = false);Сразу записывает байты data в открытый пакет под targetPath. После возврата изменение исходного массива не меняет уже записанные данные. Не сериализует Variant или Resource автоматически. Перед вызовом нужен успешный PckStart; после добавления нужен Flush.
| Имя | Тип | По умолчанию |
|---|---|---|
targetPath | string | — |
data | byte[] | — |
encrypt | bool | false |
targetPathЛогический путь внутри пакета. Префикс asset:// необязателен и удаляется при записи; это не имя выходного PCK.
dataБайты содержимого. Для текста самостоятельно выберите кодировку, например Encoding.UTF8.GetBytes(text). Для span-перегрузки encrypt передаётся явно.
encryptШифровать байты этого файла ключом из PckStart. Не меняет флаг шифрования каталога.
ErrorError.Ok при успешном выполнении; иначе код ошибки. Проверяйте его до следующего шага; ошибка не означает автоматического удаления частичного файла.
public Error AddFileFromBuffer(string targetPath, ReadOnlySpan<byte> data, bool encrypt);Сразу записывает байты data в открытый пакет под targetPath. После возврата изменение исходного массива не меняет уже записанные данные. Не сериализует Variant или Resource автоматически. Перед вызовом нужен успешный PckStart; после добавления нужен Flush.
| Имя | Тип | По умолчанию |
|---|---|---|
targetPath | string | — |
data | ReadOnlySpan<byte> | — |
encrypt | bool | — |
targetPathЛогический путь внутри пакета. Префикс asset:// необязателен и удаляется при записи; это не имя выходного PCK.
dataБайты содержимого. Для текста самостоятельно выберите кодировку, например Encoding.UTF8.GetBytes(text). Для span-перегрузки encrypt передаётся явно.
encryptШифровать байты этого файла ключом из PckStart. Не меняет флаг шифрования каталога.
ErrorError.Ok при успешном выполнении; иначе код ошибки. Проверяйте его до следующего шага; ошибка не означает автоматического удаления частичного файла.
AddFileRemovalError
public Error AddFileRemoval(string targetPath);Добавляет в открытый PCK запись удаления логического пути. Сейчас файловая система не меняется: удаление применяется при подключении завершённого пакета. Запись удаления применяется даже при LoadResourcePack(..., replaceFiles: false). Это не удаление физического файла с диска и не освобождение уже загруженного Resource.
| Имя | Тип | По умолчанию |
|---|---|---|
targetPath | string | — |
targetPathЛогический путь внутри пакета. Префикс asset:// необязателен и удаляется при записи; это не имя выходного PCK.
ErrorError.Ok при успешном выполнении; иначе код ошибки. Проверяйте его до следующего шага; ошибка не означает автоматического удаления частичного файла.
FlushError
public Error Flush(bool verbose = false);Записывает каталог добавленных файлов и закрывает текущий PCK. Вызывайте явно и проверяйте Error; после завершения для следующего пакета нужен PckStart. Dispose открытого упаковщика также завершает пакет, но не возвращает вызывающему коду результат Flush. Это не гарантия атомарной записи или сохранности при сбое питания.
| Имя | Тип | По умолчанию |
|---|---|---|
verbose | bool | false |
verboseПри true выводить сведения о добавленных файлах в журнал во время завершения. Не изменяет содержимое пакета.
ErrorError.Ok при успешном выполнении; иначе код ошибки. Проверяйте его до следующего шага; ошибка не означает автоматического удаления частичного файла.
PckStartError
public Error PckStart(string pckPath, int alignment = 32, string key = "0000000000000000000000000000000000000000000000000000000000000000", bool encryptDirectory = false);Открывает выходной файл на запись и начинает новый PCK. Расширение .pck не добавляется автоматически; существующий файл может быть перезаписан. Завершите текущий пакет перед началом следующего. Ключ проверяется даже при отключённом шифровании.
| Имя | Тип | По умолчанию |
|---|---|---|
pckPath | string | — |
alignment | int | 32 |
key | string | "0000000000000000000000000000000000000000000000000000000000000000" |
encryptDirectory | bool | false |
pckPathПуть выходного файла, например user://extra.pck, или абсолютный путь. Родительская папка должна существовать.
alignmentПоложительное выравнивание в байтах; по умолчанию 32. Ноль и отрицательные значения отклоняются.
keyРовно 64 шестнадцатеричных символа, задающих 32 байта ключа AES-256; не пароль. Нулевой ключ по умолчанию не является секретом. Для чтения зашифрованных данных нужен соответствующий ключ у загрузчика.
encryptDirectoryШифровать каталог пакета. Не включает шифрование содержимого всех файлов: для них используется отдельный encrypt при добавлении.
ErrorError.Ok при успешном выполнении; иначе код ошибки. Проверяйте его до следующего шага; ошибка не означает автоматического удаления частичного файла.