/// <summary>
        /// Checks if a (potentially processed) INI file is up-to-date
        /// or whether it needs to be (re)processed.
        /// </summary>
        /// <param name="fileName">The name of the INI file in its directory.
        /// Do not supply the entire file path.</param>
        /// <returns>True if the INI file is up-to-date, false if it needs to be processed.</returns>
        public bool IsIniUpToDate(string fileName)
        {
            PreprocessedIniInfo info = PreprocessedIniInfos.Find(i => i.FileName == fileName);

            if (info == null)
            {
                return(false);
            }

            string processedFileHash = Utilities.CalculateSHA1ForFile($"{ProgramConstants.GamePath}INI/{fileName}");

            if (processedFileHash != info.ProcessedFileHash)
            {
                return(false);
            }

            string originalFileHash = Utilities.CalculateSHA1ForFile($"{ProgramConstants.GamePath}INI/Base/{fileName}");

            if (originalFileHash != info.OriginalFileHash)
            {
                return(false);
            }

            return(true);
        }
        public void Write()
        {
            string filePath = ProgramConstants.ClientUserFilesPath + "ProcessedIniInfo.ini";

            File.Delete(filePath);

            IniFile iniFile = new IniFile(filePath);

            for (int i = 0; i < PreprocessedIniInfos.Count; i++)
            {
                PreprocessedIniInfo info = PreprocessedIniInfos[i];

                iniFile.SetStringValue(ProcessedINIsSection, i.ToString(),
                                       string.Join(",", info.FileName, info.OriginalFileHash, info.ProcessedFileHash));
            }
            iniFile.WriteIniFile();
        }