Ejemplo n.º 1
0
        /// <summary>
        /// Loads the archive from a header and data stream with specified filename.
        /// </summary>
        /// <param name="headerStream">The stream from the RFH file.</param>
        /// <param name="dataStream">The stream from the RFD file.</param>
        /// <returns>A <see cref="ResourceArchive"/> with the loaded streams' data.</returns>
        public ResourceArchive ReadArchive(Stream headerStream, Stream dataStream)
        {
            this.headerStream = headerStream;
            this.dataStream   = dataStream;

            var archive = new ResourceArchive();

            using (headerReader = new BinaryReader(headerStream))
                using (dataReader = new BinaryReader(dataStream))
                {
                    do
                    {
                        var pathLen   = headerReader.ReadUInt32();
                        var timestamp = DateTimeOffset.FromUnixTimeSeconds(headerReader.ReadUInt32()).DateTime;
                        var cmpType   = (ResourceCompressionType)headerReader.ReadUInt32();
                        var cmpSize   = headerReader.ReadUInt32();
                        var offset    = headerReader.ReadUInt32();
                        var relPath   = headerReader.ReadBytes((int)pathLen);
                        dataReader.BaseStream.Seek(offset, SeekOrigin.Begin);
                        var data = dataReader.ReadBytes((int)cmpSize);
                        archive.resources.Add(new ResourceFile
                        {
                            filepath        = Encoding.ASCII.GetString(relPath).Trim('\0'), // Null terminated strings aren't a thing in C#.
                            timestamp       = timestamp,
                            compressionType = cmpType,
                            compressedSize  = cmpSize,
                            offset          = offset,
                            data            = data
                        });
                        archive.nextOffset = offset + cmpSize;
                    }while (headerReader.BaseStream.Position < headerReader.BaseStream.Length);
                }

            return(archive);
        }
Ejemplo n.º 2
0
        public void TestZip2()
        {
            var zip = new ZipArchive();

            zip.Load(ResourceArchive.GetFlash0ZipFileStream());
            foreach (var entry in zip)
            {
                Console.Error.WriteLine(entry);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Saves the archive as a header and data file with specified filename.
        /// </summary>
        /// <param name="archive">The archive to save.</param>
        /// <param name="file">The file to save to. Extensions are optional.</param>
        /// <exception cref="IOException"></exception>
        public void WriteArchive(ResourceArchive archive, string file)
        {
            var fileExt = Path.GetExtension(file).ToLower();

            if (fileExt == ".rfh" || fileExt == ".rfd")
            {
                file = Path.ChangeExtension(file, null);
            }
            headerStream = new FileStream(file + ".rfh", FileMode.CreateNew);
            dataStream   = new FileStream(file + ".rfd", FileMode.CreateNew);

            WriteArchive(archive, headerStream, dataStream);
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            var resArchive = new ResourceArchive();

            resArchive.Add("test.txt");  //, ResourceCompressionType.Best);
            resArchive.Add("smile.png"); //, ResourceCompressionType.Fast);

            try
            {
                var writer = new RfWriter();
                writer.WriteArchive(resArchive, "tomata");
            }
            catch (IOException)
            {
                Console.WriteLine("there was a problem saving the file. it probably exists.");
            }
        }
Ejemplo n.º 5
0
        void RegisterDevices()
        {
            var memoryStickRootFolder = ApplicationPaths.MemoryStickRootFolder;

            //Console.Error.WriteLine(MemoryStickRootFolder);
            //Console.ReadKey();
            try
            {
                Directory.CreateDirectory(memoryStickRootFolder);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            /*
             */

            MemoryStickMountable = new HleIoDriverMountable();
            MemoryStickMountable.Mount("/", new HleIoDriverLocalFileSystem(memoryStickRootFolder));
            var memoryStick = new HleIoDriverMemoryStick(PspMemory, HleCallbackManager, MemoryStickMountable);

            //var MemoryStick = new HleIoDriverMemoryStick(new HleIoDriverLocalFileSystem(VirtualDirectory).AsReadonlyHleIoDriver());

            // http://forums.ps2dev.org/viewtopic.php?t=5680
            HleIoManager.SetDriver("host:", memoryStick);
            HleIoManager.SetDriver("ms:", memoryStick);
            HleIoManager.SetDriver("fatms:", memoryStick);
            HleIoManager.SetDriver("fatmsOem:", memoryStick);
            HleIoManager.SetDriver("mscmhc:", memoryStick);

            HleIoManager.SetDriver("msstor:", new ReadonlyHleIoDriver(memoryStick));
            HleIoManager.SetDriver("msstor0p:", new ReadonlyHleIoDriver(memoryStick));

            HleIoManager.SetDriver("disc:", memoryStick);
            HleIoManager.SetDriver("umd:", memoryStick);

            HleIoManager.SetDriver("emulator:", HleIoDriverEmulator);
            HleIoManager.SetDriver("kemulator:", HleIoDriverEmulator);

            HleIoManager.SetDriver("flash:",
                                   new HleIoDriverZip(new ZipArchive(ResourceArchive.GetFlash0ZipFileStream())));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Saves the archive as a header and data file with specified streams.
        /// </summary>
        /// <param name="archive">The archive to save.</param>
        /// <param name="headerStream">The stream for the RFH file being written to.</param>
        /// <param name="dataStream">The stream for the RFD file being written to.</param>
        /// <exception cref="IOException"></exception>
        public void WriteArchive(ResourceArchive archive, Stream headerStream, Stream dataStream)
        {
            this.headerStream = headerStream;
            this.dataStream   = dataStream;

            using (headerWriter = new BinaryWriter(headerStream))
                using (dataWriter = new BinaryWriter(dataStream))
                {
                    foreach (var resFile in archive.resources)
                    {
                        headerWriter.Write(resFile.filepath.Length + 1); // Compensates for null terminator to be added.
                        headerWriter.Write((uint)((DateTimeOffset)resFile.timestamp).ToUnixTimeSeconds());
                        headerWriter.Write((uint)resFile.compressionType);
                        headerWriter.Write(resFile.compressedSize);
                        headerWriter.Write(resFile.offset);
                        headerWriter.Write(Encoding.ASCII.GetBytes(resFile.filepath + "\0"));
                        dataWriter.Write(resFile.data);
                    }
                }
        }
Ejemplo n.º 7
0
 public void Initialize()
 {
     archive = new ResourceArchive();
     shellViewModel.Archive = archive;
 }