public void WriteFile(Emulator_DOSBox_AutoConfigData data)
    {
        StringBuilder stringBuilder = new StringBuilder();

        // Add the first lines
        stringBuilder.AppendLine(FirstLines);

        // Add the custom commands separator
        stringBuilder.AppendLine(CustomCommandsSeparator);

        // Add the custom commands
        foreach (string customLine in data.CustomLines)
        {
            stringBuilder.AppendLine(customLine);
        }

        // Add the sections
        foreach (var sections in data.SectionNames)
        {
            // Add the section name
            stringBuilder.AppendLine($"[{sections.Key}]");

            // Add each command
            foreach (var key in sections.Value)
            {
                // Make sure the key has been added
                if (data.Configuration.ContainsKey(key))
                {
                    // Add the command
                    stringBuilder.AppendLine($"{key}={data.Configuration[key]}");
                }
            }

            // Add empty line
            stringBuilder.AppendLine();
        }

        // Write the text to the file
        File.WriteAllText(FilePath, stringBuilder.ToString());
    }
    public Emulator_DOSBox_AutoConfigData ReadFile()
    {
        // Read the file content
        var content = File.ReadAllText(FilePath);

        // Remove the first lines
        content = content.Substring(FirstLines.Length);

        // Split into lines
        var lines = content.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

        // Create the output
        var output = new Emulator_DOSBox_AutoConfigData();

        // Keep track of if we've reached the custom commands
        bool inCustomCommands = false;

        // Keep track if we're in a section
        bool inSection = false;

        // Check each line
        foreach (var line in lines)
        {
            // Flag when the custom commands are reached
            if (!inCustomCommands && line == CustomCommandsSeparator)
            {
                inCustomCommands = true;
                continue;
            }

            // If we've reached the custom commands, check if the line has a section name
            if (!inSection && inCustomCommands && line.StartsWith("["))
            {
                inSection = true;
                continue;
            }

            // Ignore section names
            if (line.StartsWith("["))
            {
                continue;
            }

            // Ignore if it's empty
            if (line.IsNullOrWhiteSpace())
            {
                continue;
            }

            if (inSection)
            {
                // Get the values
                string[] values = line.Split('=');

                // Make sure we have two values
                if (values.Length != 2)
                {
                    continue;
                }

                // Add the values
                output.Configuration.Add(values[0], values[1]);
            }
            else if (inCustomCommands)
            {
                output.CustomLines.Add(line);
            }
            else
            {
                // Ignore if it's not a valid config line
                if (!line.StartsWith(ConfigLineStart))
                {
                    continue;
                }

                // Get the values
                string[] values = line.Substring(ConfigLineStart.Length).Trim('\"').Split('=');

                // Make sure we have two values
                if (values.Length != 2)
                {
                    continue;
                }

                // Add the values
                output.Configuration.Add(values[0], values[1]);
            }
        }

        return(output);
    }