void FillFileListRecursively(string path, LocaleFileStorage storage, State state, int depth) { foreach (var file in Directory.GetFiles(path, "*", SearchOption.AllDirectories)) { if (Directory.Exists(file)) { if (depth < MAX_DEPTH) { FillFileListRecursively(file, storage, state, depth + 1); } } else if (Path.GetExtension(file) == ".sql") { FEL_LOG_TRACE("sql.updates", "Added locale file \"{0}\".", Path.GetFileName(file)); var entry = new LocaleFileEntry(file, state); // Check for doubled filenames // Because elements are only compared by their filenames, this is ok if (storage.Contains(entry)) { FEL_LOG_FATAL("sql.updates", "Duplicate filename \"{0}\" occurred. Because updates are ordered by their filenames, every name needs to be unique!", file); throw new UpdateException("Updating failed, see the log for details."); } storage.Add(entry); } } }
LocaleFileStorage GetFileList() { LocaleFileStorage files = new LocaleFileStorage(); DirectoryStorage directories = ReceiveIncludedDirectories(); foreach (var entry in directories) { FillFileListRecursively(entry.DirectoryPath, files, entry.State, 1); } return(files); }