VB.NET根据文件名创建文件夹

时间:2011-05-04 13:40:44

标签: vb.net directory

下面的代码根据不同的文件名创建多个文件夹,并将这些文件移动到新文件夹中。例如,文件ABC和XYZ被移动到新创建的名为ABC和XYZ的文件夹中。我想推进代码,以允许稍微不同的文件名进入一个公共文件夹。例如,我想将文件ABC_rock,ABC_soil和ABC_water放入名为ABC的文件夹中,并将文件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 个答案:

答案 0 :(得分:2)

从开始就打开文件名 - 我在这里使用下划线,但你可以根据需要改变它。拆分将在所有情况下创建至少一个项目,如果您只对第一部分感兴趣,可以通过更改一行来处理:

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

如果有下划线,它会使用第一个之前的所有内容。如果没有下划线,它将使用整个文件名。

答案 1 :(得分:0)

如果你知道你的分隔符是什么,那么你可以在提取文件名后使用像.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...
}

请注意,上面的代码假定您的分隔符是下划线字符。

答案 2 :(得分:0)

如果所有文件名的格式都与PREFIX_somethingElse相同,则可以对每个文件名使用Split()函数来查找公共前缀。获得所有前缀的列表后,可以使用此前缀创建文件夹,然后将每个文件移动到名为其前缀​​的文件夹中。

要执行此操作,您需要知道文件名上的分隔符,以便使用Split()函数。

这个过程将是这样的:

  1. 声明字符串列表
  2. 使用文件名迭代 split()获取前缀并添加 您在列表中找到的每个新前缀
  3. 遍历列表并创建 每个前缀的文件夹
  4. 通过文件名迭代并移动 每个文件到名为的文件夹 该文件名的前缀。
  5. 如果您使用更复杂的数据结构以避免多次迭代,则可以大大优化该过程,但这是基本想法。