public static List <Simfile> OpenSimfileDir()
        {
            List <Simfile> simfiles       = new List <Simfile>();
            List <string>  simfileNames   = new List <string>();
            int            duplicateCount = 0;

            CommonOpenFileDialog dialogOpenFolder = new CommonOpenFileDialog
            {
                IsFolderPicker = true,
                Title          = "Select a folder containing Stepmania simfiles...",
            };

            if (dialogOpenFolder.ShowDialog() != CommonFileDialogResult.Ok)
            {
                return(simfiles); //User hit cancel, let's not load any simfiles
            }

            //Get all SM simfiles in the selected directory and parse them
            string[] simfilePaths = Directory.GetFiles(dialogOpenFolder.FileName, "*.sm", SearchOption.AllDirectories);
            foreach (string simfilePath in simfilePaths)
            {
                Simfile simfile = Simfile.ParseSimfileSM(simfilePath);
                if (simfileNames.Contains(simfile.Name))   //If a file with the same name has been loaded before, don't add it to the simfile list
                {
                    duplicateCount++;
                    Console.WriteLine("Duplicate SM file: " + simfile.Name);
                }
                else     //Otherwise, add the simfile to the list
                {
                    simfiles.Add(simfile);
                    simfileNames.Add(simfile.Name);
                }
            }

            //Get all DWI simfiles in the selected directory and parse them
            simfilePaths = Directory.GetFiles(dialogOpenFolder.FileName, "*.dwi", SearchOption.AllDirectories);
            foreach (string simfilePath in simfilePaths)
            {
                Simfile simfile = Simfile.ParseSimfileDWI(simfilePath);
                if (simfileNames.Contains(simfile.Name))   //If a file with the same name has been loaded before, don't add it to the simfile list
                {
                    duplicateCount++;
                    Console.WriteLine("Duplicate DWI file: " + simfile.Name);
                }
                else     //Otherwise, add the simfile to the list
                {
                    simfiles.Add(simfile);
                    simfileNames.Add(simfile.Name);
                }
            }

            if (duplicateCount >= 1)
            {
                MessageBox.Show(duplicateCount + " simfiles with the same name were detected and have not been loaded.\n\nPlease ensure all simfiles have different names, and that each simfile only has *one* supported file type for note data (i.e. either a SM *or* a DWI file)", "Warning - SM Rating Scale Converter", MessageBoxButton.OK, MessageBoxImage.Warning);
            }

            return(simfiles);
        }