如何重命名列表框中所有文件的后缀?
Posted
技术标签:
【中文标题】如何重命名列表框中所有文件的后缀?【英文标题】:How to rename suffix of all files in listbox? 【发布时间】:2021-07-24 07:48:32 【问题描述】:我有一个包含两个列表框和两个工具条标签(按钮)的窗体。
按下第一个按钮(打开文件夹)时,文件浏览器打开,您可以选择多个文件,然后将这些文件加载到列表框 1(ListFilesLoaded)中,现在我要做的是在列表框 2 中显示转换后的文件名(转换名称)。比如……
apple_001.jpg > apple_Ambrosia.jpg apple_002.jpg > apple_Melba.jpg apple_003.jpg > apple_Granny.jpg然后按我的第二个按钮(重命名文件)将重命名的文件保存在其原始目录中(删除旧文件/名称)。
到目前为止,我已经让加载 listbox1 (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
说到保存名字部分,我完全不知道。
也感谢您抽出宝贵的时间。
【问题讨论】:
新名称从何而来?它们是存储在某个地方还是您当时手动输入它们? 新名称总是一样的,所以我想对它们进行硬编码,我一共得到了 12 张图像,它们总是以 001,002,003 等开头。这些总是会更改为同一个词。所以... 001 将永远成为 Ambrosia 002 将永远成为 Melba 等等。 【参考方案1】:我更改了控件的名称以匹配我的测试程序。
我使用List(Of Tuple(Of String, String)
来存储原始文件的路径和文件名。 https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/tuples 和 https://docs.microsoft.com/en-us/dotnet/api/system.tuple?view=net-5.0 如果没有命名项,则元组元素在第一个字符串中称为 Item1
,第二个字符串称为 Item2
。由于我们的方法很小,我觉得没有必要命名元素或使用结构或类。
Item1 is the full path (with file name and extension)
Item2 is the file name only with extension
接下来,我们将列表绑定到第一个设置显示和值成员的列表框。现在我们可以遍历列表框。请记住,列表框中的每个项目都是一个Tuple(Of String, String)
,我们可以使用Item1
和Item2
来引用它的元素。我们将文件名发送给返回新文件名的函数
要实际更改磁盘上的文件名,我们可以使用 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
方法来完成这项工作。https://docs.microsoft.com/en-us/dotnet/api/system.string.replace?view=净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
【讨论】:
嗨,玛丽,谢谢你,它工作得很好,我现在已经将它拆分为多个按钮,它正在做它应该做的工作。我确实得到了一个错误,在将“ListFilesLoaded.Items.Clear()”添加到打开文件按钮之后(这样我就可以清除所有打开的文件并基本上选择一组新的文件来重命名),当按钮是应用程序错误按下(“设置 DataSource 属性时无法修改项目集合。”)。我在“If”语句之前添加了这行代码来打开文件。 @Oogle_doogleson 我认为您需要设置ListFilesLoaded.DataSource = Nothing
要清除List(Of T)
,请使用.Clear
方法。以上是关于如何重命名列表框中所有文件的后缀?的主要内容,如果未能解决你的问题,请参考以下文章