Exemple #1
0
        public int Extract(string outDir)
        {
            int res = 0;

            Console.WriteLine($"--- {FormatName} ---");
            for (NcaSectionType section = NcaSectionType.Code; section <= NcaSectionType.Logo; section++)
            {
                using (IFileSystem currentIFs = TryOpenFileSystemSection(section))
                {
                    if (currentIFs != null)
                    {
                        string basePath = $"{outDir}/{FormatName}/{section}/";
                        Console.WriteLine();
                        List <string> dirEntList = EnumerateDir(currentIFs);
                        if (dirEntList.Count <= 0)
                        {
                            continue;
                        }
                        Directory.CreateDirectory(basePath);
                        foreach (string dirEnt in dirEntList)
                        {
                            string name     = dirEnt;
                            string filePath = $"{basePath}{name}".TrimEnd('\x00');

                            currentIFs.OpenFile(out IFile OpenFile, name.ToU8Span(), OpenMode.Read);
                            if (OpenFile != null)
                            {
                                Console.WriteLine($"{filePath}");
                                using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                                {
                                    OpenFile.AsStream().CopyTo(fileStream);
                                }
                            }
                        }
                        Console.WriteLine("\n");
                    }
                }
            }
            return(res);
        }