如何重命名列表框中所有文件的后缀?
How to rename suffix of all files in listbox?
我有一个 windows 表单,其中包含两个列表框和两个工具条标签(按钮)。
按下第一个按钮(打开文件夹),文件浏览器打开,您可以 select 多个文件,然后将这些文件加载到列表框 1 (ListFilesLoaded),现在我要做的是显示转换列表框 2 (ConvertedNames) 中的文件名。例如...
- apple_001.jpg > apple_Ambrosia.jpg
- apple_002.jpg > apple_Melba.jpg
- apple_003.jpg > apple_Granny.jpg
然后按我的第二个按钮(重命名文件)将重命名的文件保存在它们的原始目录中(删除旧文件/名称)。
到目前为止,我的加载列表框 1 (ListFilesLoaded) 工作正常。我只是不确定如何更改列表框 2 (ConvertedNames) 中的显示名称并将它们保存为新文件名。
Imports System.IO
Public Class Form1
Private openFile As OpenFileDialog 'window to open files
Private Sub ToolStripLabel1_Click(sender As Object, e As EventArgs) Handles ToolStripLabel1.Click
Try
openFile = New OpenFileDialog
openFile.Title = "Select files."
openFile.CheckFileExists = True
openFile.Multiselect = True
openFile.RestoreDirectory = False
If openFile.ShowDialog = Windows.Forms.DialogResult.OK Then
openFile.SafeFileNames.Count()
For i As Integer = 0 To openFile.SafeFileNames.Count() - 1
ListFilesLoaded.Items.Add(openFile.SafeFileNames(i))
ConvertedNames.Items.Add(openFile.SafeFileNames(i))
Next
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub ToolStripLabel2_Click(sender As Object, e As EventArgs) Handles ToolStripLabel2.Click
End Sub
所以基本上我认为我需要类似...
If ConvertedNames.Items.string.contains "_001" then
ConvertedNames.Items.string = ConvertedNames.Items.string -4 + _Ambrosia
else if
ConvertedNames.Items.string.contains "_002" then
ConvertedNames.Items.string = ConvertedNames.Items.string -4 + _Melba
else if
ConvertedNames.loaded.name.contains "_003" then
ConvertedNames.Items.string = ConvertedNames.Items.string -4 + _Granny
End If
关于保存名字的部分,我完全没有概念。
感谢您抽出时间来看看。
我更改了您的控件名称以匹配我的测试程序。
我用了一个List(Of Tuple(Of String, String)
来存放原始文件的路径和文件名。 https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/tuples and https://docs.microsoft.com/en-us/dotnet/api/system.tuple?view=net-5.0 如果没有命名项,元组元素被称为第一个字符串的 Item1
和第二个字符串的 Item2
。由于我们的方法很小,我觉得命名元素或使用结构或 class 是没有必要的。
Item1 is the full path (with file name and extension)
Item2 is the file name only with extension
接下来,我们将列表绑定到设置显示和值成员的第一个列表框。现在我们可以遍历列表框。请记住,列表框中的每个项目都是一个 Tuple(Of String, String)
,我们可以使用 Item1
和 Item2
来引用其元素。我们将文件名发送到 returns 新文件名
的函数
要实际更改磁盘上的文件名,我们可以使用 Visual Basic 特定的 FileIO.FileSystem.Rename
方法。 https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.fileio.filesystem.renamefile?view=net-5.0该方法以原文件的完整路径和新文件名作为参数。
最后,新名称添加到第二个列表框中。
GetNewName
函数使用 Select Case
和 String.Replace
方法来执行 job.https://docs.microsoft.com/en-us/dotnet/api/system。 string.replace?view=net-5.0
Private Sub ToolStripLabel1_Click(sender As Object, e As EventArgs) Handles ToolStripLabel1.Click
Dim openFile = New OpenFileDialog
openFile.Title = "Select files."
openFile.CheckFileExists = True
openFile.Multiselect = True
openFile.RestoreDirectory = False
If openFile.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim lstPathAndFile As New List(Of Tuple(Of String, String))
For Each filePath In openFile.FileNames
lstPathAndFile.Add(Tuple.Create(filePath, Path.GetFileName(filePath)))
Next
ListBox1.DisplayMember = "Item2"
ListBox1.ValueMember = "Item1"
ListBox1.DataSource = lstPathAndFile
For Each t As Tuple(Of String, String) In ListBox1.Items
Dim NewName = GetNewName(t.Item2)
FileIO.FileSystem.RenameFile(t.Item1, NewName)
ListBox2.Items.Add(NewName)
Next
End If
End Sub
Private Function GetNewName(OriginalFileName As String) As String
Dim NewFileName As String = ""
Select Case True
Case OriginalFileName.Contains("001")
NewFileName = OriginalFileName.Replace("001", "Ambrosia")
Case OriginalFileName.Contains("002")
NewFileName = OriginalFileName.Replace("002", "Melba")
Case OriginalFileName.Contains("003")
NewFileName = OriginalFileName.Replace("003", "Granny")
End Select
Return NewFileName
End Function
我有一个 windows 表单,其中包含两个列表框和两个工具条标签(按钮)。
按下第一个按钮(打开文件夹),文件浏览器打开,您可以 select 多个文件,然后将这些文件加载到列表框 1 (ListFilesLoaded),现在我要做的是显示转换列表框 2 (ConvertedNames) 中的文件名。例如...
- apple_001.jpg > apple_Ambrosia.jpg
- apple_002.jpg > apple_Melba.jpg
- apple_003.jpg > apple_Granny.jpg
然后按我的第二个按钮(重命名文件)将重命名的文件保存在它们的原始目录中(删除旧文件/名称)。
到目前为止,我的加载列表框 1 (ListFilesLoaded) 工作正常。我只是不确定如何更改列表框 2 (ConvertedNames) 中的显示名称并将它们保存为新文件名。
Imports System.IO
Public Class Form1
Private openFile As OpenFileDialog 'window to open files
Private Sub ToolStripLabel1_Click(sender As Object, e As EventArgs) Handles ToolStripLabel1.Click
Try
openFile = New OpenFileDialog
openFile.Title = "Select files."
openFile.CheckFileExists = True
openFile.Multiselect = True
openFile.RestoreDirectory = False
If openFile.ShowDialog = Windows.Forms.DialogResult.OK Then
openFile.SafeFileNames.Count()
For i As Integer = 0 To openFile.SafeFileNames.Count() - 1
ListFilesLoaded.Items.Add(openFile.SafeFileNames(i))
ConvertedNames.Items.Add(openFile.SafeFileNames(i))
Next
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub ToolStripLabel2_Click(sender As Object, e As EventArgs) Handles ToolStripLabel2.Click
End Sub
所以基本上我认为我需要类似...
If ConvertedNames.Items.string.contains "_001" then
ConvertedNames.Items.string = ConvertedNames.Items.string -4 + _Ambrosia
else if
ConvertedNames.Items.string.contains "_002" then
ConvertedNames.Items.string = ConvertedNames.Items.string -4 + _Melba
else if
ConvertedNames.loaded.name.contains "_003" then
ConvertedNames.Items.string = ConvertedNames.Items.string -4 + _Granny
End If
关于保存名字的部分,我完全没有概念。
感谢您抽出时间来看看。
我更改了您的控件名称以匹配我的测试程序。
我用了一个List(Of Tuple(Of String, String)
来存放原始文件的路径和文件名。 https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/tuples and https://docs.microsoft.com/en-us/dotnet/api/system.tuple?view=net-5.0 如果没有命名项,元组元素被称为第一个字符串的 Item1
和第二个字符串的 Item2
。由于我们的方法很小,我觉得命名元素或使用结构或 class 是没有必要的。
Item1 is the full path (with file name and extension)
Item2 is the file name only with extension
接下来,我们将列表绑定到设置显示和值成员的第一个列表框。现在我们可以遍历列表框。请记住,列表框中的每个项目都是一个 Tuple(Of String, String)
,我们可以使用 Item1
和 Item2
来引用其元素。我们将文件名发送到 returns 新文件名
要实际更改磁盘上的文件名,我们可以使用 Visual Basic 特定的 FileIO.FileSystem.Rename
方法。 https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.fileio.filesystem.renamefile?view=net-5.0该方法以原文件的完整路径和新文件名作为参数。
最后,新名称添加到第二个列表框中。
GetNewName
函数使用 Select Case
和 String.Replace
方法来执行 job.https://docs.microsoft.com/en-us/dotnet/api/system。 string.replace?view=net-5.0
Private Sub ToolStripLabel1_Click(sender As Object, e As EventArgs) Handles ToolStripLabel1.Click
Dim openFile = New OpenFileDialog
openFile.Title = "Select files."
openFile.CheckFileExists = True
openFile.Multiselect = True
openFile.RestoreDirectory = False
If openFile.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim lstPathAndFile As New List(Of Tuple(Of String, String))
For Each filePath In openFile.FileNames
lstPathAndFile.Add(Tuple.Create(filePath, Path.GetFileName(filePath)))
Next
ListBox1.DisplayMember = "Item2"
ListBox1.ValueMember = "Item1"
ListBox1.DataSource = lstPathAndFile
For Each t As Tuple(Of String, String) In ListBox1.Items
Dim NewName = GetNewName(t.Item2)
FileIO.FileSystem.RenameFile(t.Item1, NewName)
ListBox2.Items.Add(NewName)
Next
End If
End Sub
Private Function GetNewName(OriginalFileName As String) As String
Dim NewFileName As String = ""
Select Case True
Case OriginalFileName.Contains("001")
NewFileName = OriginalFileName.Replace("001", "Ambrosia")
Case OriginalFileName.Contains("002")
NewFileName = OriginalFileName.Replace("002", "Melba")
Case OriginalFileName.Contains("003")
NewFileName = OriginalFileName.Replace("003", "Granny")
End Select
Return NewFileName
End Function