VB.NET Создание папок на основе имен файлов - PullRequest
1 голос
/ 04 мая 2011

Приведенный ниже код создает несколько папок на основе разных имен файлов и перемещает эти файлы в новые папки.Например, файлы ABC и XYZ перемещаются во вновь созданную папку с именами ABC и XYZ.Я хочу продвинуть код, чтобы немного отличающиеся имена файлов могли попасть в общую папку.Например, я хочу, чтобы файлы ABC_rock, ABC_soil и ABC_water помещались в папку с именем ABC still, а файлы XYZ_rock, XYZ_soil и XYZ_water помещались в папку с именем XYZ.Я не хочу, чтобы отдельная папка создавалась для ABC_rock, ABC_soil и ABC_water.Любые предложения с благодарностью.Спасибо за вашу помощь.

        Dim strOutputLocation As String = "C:\Temp"
        Dim rootPath As String = strOutputLocation

        For Each filepath As String In IO.Directory.GetFiles(rootPath)

            Dim folderName As String = IO.Path.GetFileNameWithoutExtension(filepath)
            Dim folderPath As String = IO.Path.Combine(rootPath, folderName)

            If Not IO.Directory.Exists(folderPath) Then
                IO.Directory.CreateDirectory(folderPath)
            End If

            Dim fileName2 As String = IO.Path.GetFileName(filepath)
            Dim newFilePath As String = IO.Path.Combine(folderPath, fileName2)

            File.Move(filepath, newFilePath)

        Next

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

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

Dim folderName As String = IO.Path.GetFileNameWithoutExtension(filepath).Split("_")(0)

Если есть подчеркивание, он использует все допервый.Если нет подчеркиваний, он будет использовать все имя файла.

0 голосов
/ 04 мая 2011

Если все ваши имена файлов имеют одинаковый формат PREFIX_somethingElse, вы можете использовать функцию Split () для каждого имени файла, чтобы найти общие префиксы. Как только у вас есть список всех префиксов, вы можете создать папки, используя эти префиксы, а затем переместить каждый файл в папку, названную его префиксом.

Для этого вам нужно знать символ разделителя в имени файла, чтобы использовать функцию Split ().

Процесс будет примерно таким:

  1. Объявить список строк
  2. Итерация по именам файлов с использованием split (), чтобы получить префикс и добавить каждый новый префикс, который вы найдете в списке
  3. Итерация по списку и создание папка для каждого префикса
  4. Итерация по именам файлов и перемещение каждый файл в папку с именем префикс этого имени файла.

Процесс может быть значительно оптимизирован, если вы используете более сложные структуры данных, чтобы избежать нескольких итераций, но это основная идея.

0 голосов
/ 04 мая 2011

Если вы знаете, каким будет ваш символ-разделитель, вы можете использовать что-то простое, например .Split(), после извлечения имени файла.Если имена файлов могут быть более сложными, чем это, вам нужно использовать RegEx.

var fileName = "ABC_rock";
var parts = fileName.Split(new String[] { "_" }, System.StringSplitOptions.RemoveEmptyEntries);
if (parts.Length >= 1) {
    var folderName = parts[0];

    // Move fileName here...
}

Обратите внимание, что в приведенном выше коде предполагается, что ваш разделитель является символом подчеркивания.

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