MoltenMercury/libWyvernzora/IO/Packaging/AFS/AFSPackageCreator.cs
(开头部分) 5KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace libWyvernzora.IO.Packaging
{
public class AFSPackageCreator : IDisposable
{
//Mainly depends on the PackageEntry.GetAdditionalProperty(...) func.
const int ALIGN = 0x800;
Queue<PackageEntry> fileEntries = new Queue<PackageEntry>();
string npath;
public Action<Double> NotifyProgress { get; set; }
public Action<String> NotifyDetails { get; set; }
public Boolean HasErrors { get; set; }
public AFSPackageCreator(string path)
{ npath = path; }
public void AddFile(PackageEntry macro)
{
if (macro.Name.Length <= 32)
{
fileEntries.Enqueue(macro);
}
else
{
NotifyDetails(String.Format("Error :> Filename overflow :> \"{0}\"", macro.Name));
HasErrors = true;
}
}
public void Flush()
{
if (NotifyProgress != null) NotifyProgress(0);
if (NotifyDetails != null) NotifyDetails("Building Header...");
string cpath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "temp");
if (!System.IO.Directory.Exists(cpath)) System.IO.Directory.CreateDirectory(cpath);
//Calculate Header Length
//4 bytes Magic Number + 4 bytes F_Count
//4 bytes Descriptor Offset + 4 Bytes Descriptor Length
// = 16 Bytes
Int32 hdrlen = 16 + fileEntries.Count * 8;
Int32 descLen = fileEntries.Count * 0x30;
hdrlen = calcCapacity(hdrlen);
descLen = calcCapacity(descLen);
if (NotifyDetails != null) NotifyDetails("Done!\n");
if (NotifyDetails != null) NotifyDetails("Writing Header...");
using (ExStream fs = new ExStream(npath, FileMode.Create, FileAccess.ReadWrite))
{
//Write Identifier
StreamTools.WriteASCII(fs, "AFS\0");
StreamTools.WriteI32(fs, fileEntries.Count, BitSequence.LittleEndian);
//update Header
Int32 c_offset = hdrlen;
Int32 fp = 0;
后面还有 81 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。