C# Сканирование всех файлов в папке и выполняя задание

Нужно как то составить код, чтобы Программа по указанному пути выбирала файлы (в данном случае все файлы будут XlsX и выполняла действия, которые написаны в кнопках

Пример кода (как я его вижу):

    //Выбор нужной папки     OpenFileDialog opf = new OpenFileDialog();     opf.ShowDialog();     // РАБОЧАЯ ЧАСТЬ КОДА (существующая)     using (XLWorkbook workBook = new XLWorkbook(opf.FileName))  //using ClosedXML     {     IXLWorksheet workSheet = workBook.Worksheet("Лист1");     //создание таблицы     System.Data.DataTable dt = new System.Data.DataTable();     bool firstRow = true; foreach (IXLCell cell in row.Cells()) //добавляем колонки в таблице { dt.Columns.Add(cell.WorksheetColumn().ColumnLetter()); }     }     this.dataGridView.Rows[0].Cells[1].Value = workSheet.Cell("B" + 5).Value;      //Код который нужно дополнительно сделать (по мимо сканирования папки)     Button1.click(); //выполнение действия написанные в кнопки     Button2.click(); 

Если не понятно что-то, то напишите в комментарии, я отвечу и постараюсь перефразировать свои слова

Возможно ли создать папку в internal storage именно в папке files?

При попытке создать папку именно в папке files

val dir = getDir("files", Context.MODE_PRIVATE) val file = File(dir, "mydir") file.mkdir()

создается папка app_files/mydir. Получается в папке files невозможно создать вложенные папки, доступно только создание файлов? если создать отдельную папку в корневой директории для приложения filesDir, будет ли это папка приватной?

Нормализация пути к папке или файлу

Нужно по именам бизнес-сущностей создавать папки и подпапки в них, чтобы названия были максимально близки к оригинальным.

При этом, надо учитывать ограничения операционной системы, что добавляет мороки – если на linux-macos ограничений фактически нет, то на windows их более чем полно.

Получился вот такой код, недопустимые символы заменяются на точку.

private static readonly string NormalizationPattern = string.Format(@"([{0}]*\.+$  )|([{0}]+)", Regex.Escape(string.Concat(new string(Path.GetInvalidPathChars()), "?", "/", "*", "\""))); private static readonly string[] DosReservedNames = { "CON", "PRN", "AUX", "NUL", "COM0", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" };  public static string NormalizePath(string name) {   if (Environment.OSVersion.Platform == PlatformID.Unix ||       Environment.OSVersion.Platform == PlatformID.MacOSX)     return name;    const string replacement = ".";   var matchesCount = Regex.Matches(name, @":\").Count;   string correctName;   if (matchesCount > 0)   {     var regex = new Regex(@":", RegexOptions.RightToLeft);     correctName = regex.Replace(name, replacement, regex.Matches(name).Count - matchesCount);   }   else     correctName = name.Replace(":", replacement);    var replace = Regex.Replace(correctName, NormalizationPattern, replacement);   foreach (var reservedName in DosReservedNames)   {     var builder = new List<string>();     foreach (var folder in replace.Split(Path.DirectorySeparatorChar))     {       var changedName = folder;       if (string.Equals(folder, reservedName, StringComparison.InvariantCultureIgnoreCase))         changedName = replacement + reservedName;        var value = reservedName + '.';       if (folder.StartsWith(value, StringComparison.InvariantCultureIgnoreCase))         changedName = replacement + value + folder.Remove(0, value.Length);        builder.Add(changedName);     }      replace = string.Join<string>(Path.DirectorySeparatorChar.ToString(), builder);   }   return replace.TrimEnd(' ', '.'); } 

Корень папки обычно выбирается в системе и он уже существует. А дальше все уровни вложенности создаются через нормализацию. Поэтому например тримминг точек и пробелов сделан только в конце, а не на каждом уровне. Может и не стоит так делать и стоит триммить имя каждой папки.

На это всё написаны тесты, кейсы в целом выглядят вот так:

[Test, Sequential] public void CheckNotAllowedNames([Values(   "test"   ,@"C:\somename\somename:name"   ,@"usr\home\somename:name"   ,@"start < > : "" / \ | ? * end"   ,"\x15\x3D" // less than ASCII space   ,"\x21\x3D" // HEX of !, valid   ,"\x3F\x3D" // HEX of ?, not valid   ,@"C:\somename\   trailing space   "   ,@"C:\somename\...trailing period..."   ,@"C:\somename\..." // Bad name get the root folder, bug =_=   ,@"C:\somename\CON"   ,@"C:\somename\CON.txt"   ,@"CON"   ,@"C:\somename\con.txt\context"   ,@"home\NUL.liza"   ,@"home\ NUL.liza" )] string name, [Values(   "test"   ,@"C:\somename\somename.name"   ,@"usr\home\somename.name"   ,@"start . . . . . \ . . . end"   ,".="   ,"!="   ,".="   ,@"C:\somename\   trailing space"   ,@"C:\somename\...trailing period"   ,@"C:\somename\"   ,@"C:\somename\.CON"   ,@"C:\somename\.CON.txt"   ,@".CON"   ,@"C:\somename\.CON.txt\context"   ,@"home\.NUL.liza"   ,@"home\ NUL.liza" )] string expected) {   Assert.AreEqual(expected, NormalizePath(name)); } 

Собственно, хочется во первых чтобы кто-то посмотрел и может нашел пропущенные мной ошибки.

Сравнение файлов папке и в документе

Есть такая проблема. Имеется файл .dat со списком файлов которые должны находится в папке. И сама папка с файлами. Как написать программу которая будет проверять если файл не записан в .dat документе и удалять его?

Как указать в urlManager что контроллер находитсья в папке controllers/api?

[         'class' => 'yii\rest\UrlRule',         'controller' => ['api/user'],         'pluralize' => false,         'extraPatterns' => [             'GET index' => 'view',             'PUT index' => 'update',         ], 

Данное правило не работает, если перенести UserController в controllers то работает ‘controller’ => [‘user’] но мне нужно чтобы была каталог сontrollers/api.