public int CompareTo(object obj)
        {
            if (obj is NintendoU8Directory)
            {
                NintendoU8Directory o = (NintendoU8Directory)obj;

                return(this.DirectoryName.CompareTo(o.DirectoryName));
            }

            throw new ArgumentException("object is not a NintendoU8Directory");
        }
        private NintendoU8Directory getDirectoryNode(FileStream fs, int nodeIndex,
                                                     string parentDirectory, out int lastIndexProcessed)
        {
            string newParentDirectoryName;
            uint   maxNodeIndex;
            NintendoU8Directory newSubDirectory;

            lastIndexProcessed = nodeIndex;

            // get node
            u8Node node = this.NodeList[nodeIndex];

            // get directory name
            string directoryName = ParseFile.ReadAsciiString(fs, this.NameTableOffset + node.NameOffset);

            // create directory item
            NintendoU8Directory newDirectory = new NintendoU8Directory(this.SourceFileName, directoryName, parentDirectory);

            // parse other items
            maxNodeIndex = node.DataSize;


            for (int i = (nodeIndex + 1); i < maxNodeIndex; i = (lastIndexProcessed + 1))
            {
                node = this.NodeList[i];
                newParentDirectoryName = Path.Combine(parentDirectory, directoryName);

                if (node.IsDirectory())
                {
                    newSubDirectory = this.getDirectoryNode(fs, i, newParentDirectoryName, out lastIndexProcessed);

                    if (!newSubDirectory.DirectoryName.Equals("."))
                    {
                        newDirectory.SubDirectoryArray.Add(newSubDirectory);
                    }
                    else // in current folder "."
                    {
                        // move folders to this folder
                        foreach (NintendoU8Directory d in newSubDirectory.SubDirectories)
                        {
                            newDirectory.SubDirectoryArray.Add(d);
                        }

                        // move files to this folder
                        foreach (NintendoU8File f in newSubDirectory.Files)
                        {
                            newDirectory.FileArray.Add(f);
                        }
                    }
                }
                else
                {
                    newDirectory.FileArray.Add(this.getFileNode(fs, i, newParentDirectoryName));
                    lastIndexProcessed = i;
                }
            }



            return(newDirectory);
        }