更改在 FileDialog 中选择的文件的名称

Changing the Name of a File Selected in FileDialog

我正在尝试制作一个应用程序,该应用程序从您的计算机获取文件,使用来自 4 个不同组合框的变量重命名该文件,然后将其上传到 FTP 服务器。

除了重命名部分,我已经完成了所有工作.... 我想做的是这个。 slectedFile.pdf 会变成 combobox1_combobox2_combobox3_combobox4.pdf 文件路径存储在名为 FileName 的变量中 我知道如何使用组合框值更新 FileName,但它是否保留原始路径?

我该怎么做?

这是我目前的代码。 IP_box、User_Box 和 Pass_box 是相应服务器信息的文本框。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create(IP_Box.Text.ToString), System.Net.FtpWebRequest)
        request.Credentials = New System.Net.NetworkCredential(User_Box.Text.ToString, Pass_Box.Text.ToString)
        request.Method = System.Net.WebRequestMethods.Ftp.UploadFile

        Dim file() As Byte

        Try
            System.IO.File.ReadAllBytes(FileName)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace)
        End Try


        Dim strz As System.IO.Stream = request.GetRequestStream()
        strz.Write(file, 0, file.Length)
        strz.Close()
        strz.Dispose()
    End Sub

    Public Function OpenDialog()
        Dim FD As OpenFileDialog = New OpenFileDialog()

        FD.Title = "Selecteer een bestand"
        FD.InitialDirectory = "C:\"
        FD.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
        FD.FilterIndex = 2
        FD.RestoreDirectory = True

        If FD.ShowDialog() = DialogResult.OK Then
            Filename = System.IO.Path.GetFullPath(FD.FileName)
        End If
    End Function

提前致谢

在子例程结束时,您尝试检索文件;您错误地使用了 System.IO.Path.GetFullPath(FD.FileName),因为 FD.FileName 已经 提供了完整的文件名。

为了将文件重命名为您想要的名称,您需要首先评估每个 ComboBox 的值,这可以作为一个循环来完成:

Private Function enumerateCheckboxes(ByVal path As String)
    Dim fName As String
    For Each Control In Me.Controls
        If (TypeOf Control Is CheckBox AndAlso DirectCast(Control, CheckBox).Checked) Then
            fName += CStr(Control.Name) + "_"
        End If
    Next
    fName = path + fName.Substring(0, fName.Length - 1) + ".pdf"
    Return fName
End Function

Public Function OpenDialog()
    Dim FD As OpenFileDialog = New OpenFileDialog()

    FD.Title = "Selecteer een bestand"
    FD.InitialDirectory = "C:\"
    FD.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
    FD.FilterIndex = 2
    FD.RestoreDirectory = True

    If FD.ShowDialog() = DialogResult.OK Then
        Dim Filename As String = FD.FileName
        Filename = StrReverse(Filename)
        Filename = Mid(Filename, InStr(Filename, "\"), Len(Filename))
        Filename = StrReverse(Filename)
        Return Filename
    End If
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    OpenDialog()
End Sub

如果我使用桌面文件进行测试:

但是现在我们可能可能遇到文件不存在的问题,因此程序会崩溃。要解决此问题,我们可以快速重命名要上传的文件,并在完成后重命名。

完整代码:

Imports System.IO

Public Class Form1
    Dim Filename As String
    Dim originalFile As String

    Public Function OpenDialog()
        Dim FD As OpenFileDialog = New OpenFileDialog()

        FD.Title = "Selecteer een bestand"
        FD.InitialDirectory = "C:\"
        FD.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
        FD.FilterIndex = 2
        FD.RestoreDirectory = True

        If FD.ShowDialog() = DialogResult.OK Then
            Filename = FD.FileName
            Filename = StrReverse(Filename)
            Filename = Mid(Filename, InStr(Filename, "\"), Len(Filename))
            Filename = StrReverse(Filename)
            Return Filename
        End If
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create(IP_Box.Text.ToString), System.Net.FtpWebRequest)
        request.Credentials = New System.Net.NetworkCredential(User_Box.Text.ToString, Pass_Box.Text.ToString)
        request.Method = System.Net.WebRequestMethods.Ftp.UploadFile

        Dim file() As Byte

        Try
            Filename = OpenDialog()
            System.IO.File.ReadAllBytes(Filename)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace)
        End Try

        FileSystem.Rename(originalFile, Filename)
        Dim strz As System.IO.Stream = request.GetRequestStream()
        strz.Write(file, 0, file.Length)
        strz.Close()
        strz.Dispose()
        FileSystem.Rename(Filename, originalFile)
    End Sub

    Private Function enumerateCheckboxes(ByVal path As String)
        originalFile = path
        Dim fName As String
        For Each Control In Me.Controls
            If (TypeOf Control Is CheckBox AndAlso DirectCast(Control, CheckBox).Checked) Then
                fName += CStr(Control.Name) + "_"
            End If
        Next
        fName = path + fName.Substring(0, fName.Length - 1) + ".pdf"
        Return fName
    End Function
End Class