public static EPuzzleUserInfoContainer CreateFrom(string directoryName)
 {
     if (GetNamesOfSettingsFiles(directoryName).Any())
     {
         return LoadAllFilesFrom(directoryName);
     }
     else
     {
         var container = new EPuzzleUserInfoContainer();
         container.Items.Add(new EPuzzleUserInfo());
         return container;
     }
 }
 public static EPuzzleUserInfoContainer LoadAllFilesFrom(string directoryName)
 {
     var container = new EPuzzleUserInfoContainer();
     var settingsFiles = GetNamesOfSettingsFiles(directoryName);
     if (!settingsFiles.Any()) throw new ApplicationException(string.Format("No settings files were found at the specified directory. : '{0}'", directoryName));
     var resultsFiles = settingsFiles.Select(x =>
     {
         var match = Regex.Match(x, @"\Settings\.([^.]+)\.xml$");
         if (!match.Success) throw new ApplicationException(string.Format("The name '{0}' of the settings file is invalid.", x));
         return Path.Combine(directoryName, string.Format("Results.{0}.dat", match.Groups[1].Value));
     });
     var userInfos = settingsFiles.Zip(resultsFiles, (settings, results) => EPuzzleUserInfo.Load(settings, results));
     container.Items.AddRange(userInfos.OrderBy(x => x.UserName));
     return container;
 }