重命名列表框中列出的文件

时间:2014-08-03 21:24:37

标签: vb.net file-io

我试图创建一个能够从listbox-index改变shotcuts名称的小程序。 我创建了一个按钮,列出了每个文件的目标"扩展名"(以combobox1为目标),我想要另一个按钮能够改变文件名:

按钮1代码(搜索文件):

Dim kilde As New FolderBrowserDialog
If kilde.ShowDialog = Windows.Forms.DialogResult.OK Then
    Dim mappe = New System.IO.DirectoryInfo(kilde.SelectedPath)
    txtbSti.Text = kilde.SelectedPath
End If

For Each f In Directory.GetFiles(txtbSti.Text, "*" & ComboBox1.Text & "*", SearchOption.AllDirectories)
    If File.Exists(f) Then
        With ListBox1
            With .Items
                .Add(f)
            End With
        End With
    End If
Next f

这给了我一个包含所需文件的列表。 有没有办法,重命名文件,在我的情况下,列在listbox1中,逐行列出?

按钮2(无效)

    For Each r As String In ListBox1.Items
        System.IO.Path.ChangeExtension(ComboBox1.Text, " ")
    Next r

2 个答案:

答案 0 :(得分:1)

您可以使用File.Move来重命名"一个文件:

System.IO.File.Move("oldfilename", "newfilename")

例如:

For Each oldFilePath As String In ListBox1.Items
    If System.IO.File.Exists(oldFilePath) Then
        Dim dir = System.IO.Path.GetDirectoryName(oldFilePath)
        Dim newFilePath = System.IO.Path.Combine( dir, "newFileName")
        System.IO.File.Move(oldFilePath, newFilePath)
    End If
Next

修改在这种情况下,请删除自动生成的扩展程序" .avi - 快捷方式"

如果您只想更改扩展程序,可以使用Path.ChangeExtension

System.IO.Path.ChangeExtension(oldFilePath, "new_extension")

更新哦,对不起,这是该名称的一部分;文件命名,例子; J:\ Homemovies \ Jumping around.avi - Shortcut.lnk,我想删除" .avi - Shortcut" listbox1中列出的实际文件名称的一部分,用于查找目标文件夹中具有该特定扩展名的所有文件的名称; J:\ Homemovies \ jumping around.lnk

您可以使用String.Replace

Dim name = System.IO.Path.GetFileName(oldFilePath).ToLowerInvariant()
Dim newName = name.Replace(".avi - shortcut.", ".")
Dim newPath = System.IO.Path.Combine(
    System.IO.Path.GetDirectoryName(oldFilePath), newName)

Update2 仍无法使其中任何一种解决方案正常工作

这是一份完整的工作样本:

首先,阅读目录中的快捷方式:

Dim dir = "C:\Temp\Homemovies"
For Each fn In Directory.EnumerateFileSystemEntries(dir, "*avi - shortcut*.*", SearchOption.AllDirectories)
    ListBox1.Items.Add(fn)
Next

第二个(在你的按钮点击处理程序中),通过删除包含(substring)"avi - shortcut"的部分来重命名那些.Ink文件,同时处理它已经存在的情况:

For Each fn As String In ListBox1.Items
    If File.Exists(fn) Then
        Dim folder = Path.GetDirectoryName(fn)
        Dim fileName = Path.GetFileNameWithoutExtension(fn)
        Dim extension = Path.GetExtension(fn)
        Dim dotParts = fileName.Split("."c)
        Dim allButAviShortCut = From part In dotParts
                                Where part.IndexOf("avi - shortcut", StringComparison.InvariantCultureIgnoreCase) = -1
        Dim newFileName = String.Join(".", allButAviShortCut)
        Dim newPath = System.IO.Path.Combine(dir, newFileName & extension)
        Dim number = 0
        While File.Exists(newPath)
            ' exists already, append number
            number += 1
            Dim newFileNameWithNum = String.Format("{0}_{1}", newFileName, number)
            newPath = System.IO.Path.Combine(dir, newFileNameWithNum & extension)
        End While
        System.IO.File.Move(fn, newPath)
    End If
Next

答案 1 :(得分:0)

请考虑以下事项:

  • ListBox1包含所选目录中所有文件的列表。
  • txtbSti是将path保存到所选目录的文本框。
  • 每个文件都重命名为New_fileX,其中XListBox1
  • 中文件的索引

现在看一下代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim i As Integer = 0
  For Each r As String In ListBox1.Items
    i += 1
    My.Computer.FileSystem.RenameFile(txtbSti.Text & ":\" & r, "New_file" & i & ".txt")
  Next r
End Sub