Удаление недопустимых символов в именах файлов - PullRequest
0 голосов
/ 09 октября 2018

У меня есть следующий код для удаления недопустимых символов в имени файла.

Imports System.IO
Imports System.Text.RegularExpressions


Public Class Form1
    Dim fp As String

    Private Sub b1_Click(sender As Object, e As EventArgs) Handles b1.Click
        If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
            fp = FolderBrowserDialog1.SelectedPath
            t2.Text = fp
        End If
    End Sub

    Private Sub b2_Click(sender As Object, e As EventArgs) Handles b2.Click

    Dim files() As FileInfo = New DirectoryInfo(fp).GetFiles("*.*", IO.SearchOption.AllDirectories)
    For Each file As FileInfo In files
        Dim oldName = file.Name
        Dim ons As String = oldName
        t1.AppendText(ons + vbNewLine)
        Dim newName = Regex.Replace(oldName, "[^0-9a-zA-Z.]", "-")
        If oldName <> newName Then
            Dim newPath = Path.Combine(file.Directory.FullName, newName)
            file.MoveTo(newPath)
        End If
    Next

End Sub

End Class

Кажется, это проблема с FileInfo, который не может быть преобразован в строку в то же время, что Regex.Replaceтакже отказывается от некоторой проблемы с перегрузкой.
И то, и другое выходит за рамки моего понимания.

The error in more detail.

1 Ответ

0 голосов
/ 09 октября 2018

filename - это не имя файла, а экземпляр FileInfo, который имеет свойство Name, которое следует использовать вместо него.

Но кроме этого Regex.Replace возвращает строку, но вы ничего с ней не делаете.Итак, что вы хотите сделать здесь, переименовать файл?

For Each file As FileInfo In files
    Dim oldName = file.Name
    Dim newName = Regex.Replace(oldName, "[^\w ]", "-")
    If oldName <> newName Then
       Dim newPath = Path.Combine(file.Directory.FullName, newName)
       file.MoveTo(newPath)
    End If
Next
...