Esempio n. 1
0
        public static string ExtractArchiveFile(string psarcPath, string entryNamePath, string outputDir)
        {
            if (!File.Exists(psarcPath))
            {
                return("");
            }

            using (PSARC archive = new PSARC(true))
                using (var psarcStream = File.OpenRead(psarcPath))
                {
                    archive.Read(psarcStream, true);
                    var tocEntry = archive.TOC.Where(entry => entry.Name.Contains(entryNamePath)).FirstOrDefault();

                    if (tocEntry != null)
                    {
                        if (!Directory.Exists(outputDir))
                        {
                            Directory.CreateDirectory(outputDir);
                        }

                        archive.InflateEntry(tocEntry, Path.Combine(outputDir, Path.GetFileName(tocEntry.ToString())));

                        return(Path.Combine(outputDir, tocEntry.ToString()));
                    }

                    return("");
                }
        }
Esempio n. 2
0
        public static Stream GetData(this PSARC p, Func <Entry, bool> dataEntry)
        {
            var de = p.TOC.Where(dataEntry).FirstOrDefault();

            if (de != null)
            {
                if (de.Data == null)
                {
                    p.InflateEntry(de);
                }

                return(de.Data);
            }
            return(null);
        }
Esempio n. 3
0
        public static bool ReplaceData(this PSARC p, Func <Entry, bool> dataEntry, Stream newData)
        {
            var de = p.TOC.Where(dataEntry).FirstOrDefault();

            if (de != null)
            {
                if (de.Data != null)
                {
                    de.Data.Dispose();
                    de.Data = null;
                }
                else
                {
                    p.InflateEntry(de);
                }

                de.Data = newData;
                return(true);
            }
            return(false);
        }
Esempio n. 4
0
        public static Stream ExtractArchiveFile(string psarcPath, string entryNamePath)
        {
            if (!File.Exists(psarcPath))
            {
                return(null);
            }

            using (PSARC archive = new PSARC(true))
                using (var psarcStream = File.OpenRead(psarcPath))
                {
                    archive.Read(psarcStream, true);
                    var tocEntry = archive.TOC.FirstOrDefault(x => (x.Name.Equals(entryNamePath)));

                    if (tocEntry != null)
                    {
                        archive.InflateEntry(tocEntry);
                        return(tocEntry.Data);
                    }
                }

            return(null);
        }
Esempio n. 5
0
        public static Stream ExtractPSARCData(this Stream stream, Func <Entry, bool> dataEntry)
        {
            using (PSARC p = new PSARC(true))
            {
                p.Read(stream, true);

                var de = p.TOC.Where(dataEntry).FirstOrDefault();
                if (de != null)
                {
                    MemoryStream ms = new MemoryStream();
                    p.InflateEntry(de);
                    if (de.Data == null)
                    {
                        return(null);
                    }
                    de.Data.Position = 0;
                    de.Data.CopyTo(ms);
                    ms.Position = 0;
                    return(ms);
                }

                return(null);
            }
        }
        public Stream ExtractEntryData(Func <Entry, bool> entryLINQ)
        {
            var entry = _archive.TOC.Where(entryLINQ).FirstOrDefault();

            if (entry != null)
            {
                MemoryStream ms = new MemoryStream();
                _archive.InflateEntry(entry);
                if (entry.Data == null)
                {
                    return(null);
                }

                entry.Data.Position = 0;
                entry.Data.CopyTo(ms);
                entry.Dispose();
                ms.Position = 0;
                return(ms);
            }
            return(null);
        }