示例#1
0
        public override void AddFile(string file)
        {
            CheckDisposed();
            if (string.IsNullOrEmpty(file))
            {
                throw new ArgumentException(file);
            }

            var resolved = ResolvePath(file);
            BaseReadOnlyDirectoryNode parent = this;

            for (int i = 0; i < resolved.Split(Path.DirectorySeparatorChar).Count(x => x == ".."); i++)
            {
                parent = parent.Parent;
                if (parent == null)
                {
                    throw new PathOutOfRangeException(file);
                }
            }

            var unify = Common.UnifyPath(Path.Combine(RootPath, file));

            if (!Directory.Exists(Path.GetDirectoryName(unify)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(unify));
            }
            if (!File.Exists(unify))
            {
                File.Create(unify).Close();
            }
        }
示例#2
0
 public bool Identify(StreamInfo file, BaseReadOnlyDirectoryNode fileSystem)
 {
     using (var br = new BinaryReader(file.FileData, Encoding.ASCII, LeaveOpen))
     {
         return(br.ReadUInt32() == 0x17171717);
     }
 }
示例#3
0
 public void Load(StreamInfo input, BaseReadOnlyDirectoryNode fileSystem)
 {
     using (var br = new BinaryReaderX(input.FileData, Encoding.ASCII, LeaveOpen))
     {
         var header = br.ReadType <Header>();
         Layout = (RootLayoutElement)ReadLayout(br, null);
     }
 }
示例#4
0
 public bool Identify(StreamInfo fileInfo, BaseReadOnlyDirectoryNode node)
 {
     try
     {
         return(new BinaryReaderX(fileInfo.FileData, LeaveOpen).ReadString(4) == "ARC\0");
     }
     catch (Exception)
     {
         return(false);
     }
 }
示例#5
0
 public bool Identify(StreamInfo input, BaseReadOnlyDirectoryNode node)
 {
     try
     {
         using (var br = new BinaryReaderX(input.FileData, true))
             return(br.PeekString(4) == "btx\0");
     }
     catch (Exception)
     {
         return(false);
     }
 }
示例#6
0
        public void Load(StreamInfo file, BaseReadOnlyDirectoryNode fileSystem)
        {
            // Here a format class can get initialized and all opened files passed in
            var buffer = new byte[5];

            file.FileData.Position = 4;
            file.FileData.Read(buffer, 0, 5);
            _texts = new List <TextEntry> {
                new TextEntry {
                    Name = "First entry", OriginalText = Encoding.ASCII.GetString(buffer)
                }
            };
        }
示例#7
0
        void ILoadFiles.Load(StreamInfo fileInfo, BaseReadOnlyDirectoryNode node)
        {
            _format = new PAC(fileInfo.FileData);

            // Tie-in MsgAdapter
            if (fileInfo.FileName.Contains("msg"))
            {
                foreach (var afi in _format.Files.Where(afi => afi.FileName.Contains("msg")).Select(afi => afi))
                {
                    afi.PluginNames = new string[] { "plugin_yuusha_shisu_msg" }
                }
            }
            ;
        }
示例#8
0
        public void Load(StreamInfo input, BaseReadOnlyDirectoryNode fileSystem)
        {
            var dataStream = fileSystem.GetFileNode("archive.data").Open();

            using (var br = new BinaryReaderX(input.FileData, LeaveOpen))
            {
                var header  = br.ReadType <Header>();
                var entries = br.ReadMultiple <FileEntry>(header.fileCount);

                Files = entries.Select(x => new ArchiveFileInfo
                {
                    FileName    = x.name,
                    FileData    = new SubStream(dataStream, x.offset, x.size),
                    PluginNames = new[] { "plugin_test_adapters.Archive.TestArchive" }
                }).ToList();
            }
        }
示例#9
0
        private void ReplaceFilesInAdapter(IArchiveAdapter parentAdapter, BaseReadOnlyDirectoryNode physicalFs, string root)
        {
            // Loop through all directories
            foreach (var dir in physicalFs.EnumerateDirectories())
            {
                ReplaceFilesInAdapter(parentAdapter, physicalFs.GetDirectoryNode(dir.RelativePath), root);
            }

            // Update files of this directory
            foreach (var file in physicalFs.EnumerateFiles())
            {
                var openedFile = file.Open();
                var afi        = parentAdapter.Files.FirstOrDefault(x => Common.UnifyPath(x.FileName) == file.RelativePath);
                if (afi != null)
                {
                    afi.FileData.Dispose();
                    afi.FileData = openedFile;
                    afi.State    = ArchiveFileState.Replaced;
                }
            }
        }
示例#10
0
        public bool Identify(StreamInfo input, BaseReadOnlyDirectoryNode fs)
        {
            var result = true;

            try
            {
                using (var br = new BinaryReaderX(input.FileData, true))
                {
                    var magic = br.ReadString(4);
                    if (magic != "TEX\0" && magic != "\0XET")
                    {
                        result = false;
                    }
                }
            }
            catch (Exception)
            {
                result = false;
            }

            return(result);
        }
示例#11
0
        public void Load(StreamInfo input, BaseReadOnlyDirectoryNode node)
        {
            _format = new BTX(input.FileData);

            if (_format.HasPalette)
            {
                var indexEncodingInfo   = ImageEncodingInfos.FirstOrDefault(x => x.EncodingIndex == (int)_format.Header.Format);
                var paletteEncodingInfo = PaletteEncodingInfos.FirstOrDefault(x => x.EncodingIndex == (int)_format.Header.Format);
                _bitmapInfos = new List <BitmapInfo>
                {
                    new IndexedBitmapInfo(_format.Texture,
                                          indexEncodingInfo,
                                          _format.Palette,
                                          paletteEncodingInfo)
                };
            }
            else
            {
                _bitmapInfos = new List <BitmapInfo>
                {
                    new BitmapInfo(_format.Texture, ImageEncodingInfos.First(x => x.EncodingIndex == (int)_format.Header.Format))
                }
            };
        }
示例#12
0
 public void Load(StreamInfo input, BaseReadOnlyDirectoryNode fs)
 {
     _format = new TEX(input.FileData);
     // TODO: Implement support for properly populating the FormatInfo for MTTEX.
     _bitmapInfos = _format.Bitmaps;
 }
示例#13
0
 public OpenTabEventArgs(ArchiveFileInfo afi, KoreFileInfo kfi, BaseReadOnlyDirectoryNode fs)
 {
     Afi        = afi;
     Kfi        = kfi;
     FileSystem = fs;
 }
示例#14
0
        /*public bool Identify(StreamInfo input)
         * {
         *  try
         *  {
         *      using (var br = new BinaryReaderX(input.FileData, true))
         *      {
         *          var magic = br.ReadString(4);
         *          var fileSize = br.ReadInt32();
         *          return magic == "TEXT" && fileSize == br.BaseStream.Length;
         *      }
         *  }
         *  catch (Exception)
         *  {
         *      return false;
         *  }
         * }*/

        public void Load(StreamInfo input, BaseReadOnlyDirectoryNode node)
        {
            _format = new TALK(input.FileData);
        }
示例#15
0
 public bool Identify(StreamInfo file, BaseReadOnlyDirectoryNode fileSystem)
 {
     using (var br = new BinaryReaderX(file.FileData, LeaveOpen))
         return(br.ReadString(8) == "ARC TEST");
 }
示例#16
0
 public PathMismatchException(BaseReadOnlyDirectoryNode dirNode, ArchiveFileInfo afi) : base($"{nameof(ArchiveFileInfo)} doesn't match with the directory node \"{dirNode.RelativePath}\".")
 {
     DirectoryNode = dirNode;
     Afi           = afi;
 }