更改FileDialog中选定的文件的名称

时间:2015-06-01 21:59:58

标签: vb.net openfiledialog

我正在尝试创建一个从您的计算机获取文件的应用程序,使用来自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

提前谢谢

1 个答案:

答案 0 :(得分:2)

在子例程结束时,您尝试检索文件;您错误地使用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

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

enter image description here

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

完整的代码:

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