【问题标题】:VB.net How To Copy File To New LocationVB.net 如何将文件复制到新位置
【发布时间】:2018-10-09 09:21:59
【问题描述】:

所以我正在做一个项目,目的是让我的用户从那里的个人文件中选择一个 mp3/wav 文件,并将其保存在我的程序目录中,以便以后访问。

Public Class Uploader_Control


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button_Upload.Click 'Button click triggers open file dialog
    OpenFileDialog1.InitialDirectory = "C:\" 
    OpenFileDialog1.Title = "Upload A Song" 
    OpenFileDialog1.Filter = "Audio Files|*.mp3; *.wav"
    OpenFileDialog1.Multiselect = False
    OpenFileDialog1.ShowDialog()
    Dim New_Upload As String = OpenFileDialog1.FileName 'Sets 'New_Upload' to the location of the selected file.

    Dim Upload_Path = Get_Upload_Path() 'Triggers function to find the destination path that i want the file to be copied too



End Sub
Function Get_Upload_Path() 'Tries to find the location for the file to saved too
    Dim Upload_Path As String = Application.ExecutablePath
    Upload_Path = Upload_Path.Substring(0, Upload_Path.LastIndexOf("/")) & "\Resources\" 

    Return Upload_Path
End Function

我尝试了一些方法来尝试复制它,但是我似乎找不到将文件复制到目录中的方法。如果有人能对我实现这一目标的方法提供任何见解,将不胜感激。

【问题讨论】:

    标签: vb.net openfiledialog


    【解决方案1】:

    首先要修复的是您的 GetUploadPath。

    Function Get_Upload_Path() as String
        Dim newPath As String = Application.ExecutablePath
        newPath = Path.Combine(Path.GetDirectoryName(newPath), "Resources")
        Return newPath
    End Function
    

    在这里,我使用安全的 Path 类方法来提取您的文件夹并附加您的 Resource 文件夹。您的代码改为使用字符“/”,这不是 Windows 中的默认路径分隔符。可能你会在那里得到一个例外

    最后你使用 File.Copy 来复制一个文件,但请记住,你应该始终为 File.Copy 源和目标参数提供一个文件名,而不仅仅是一个目录名

      if OpenFileDialog1.ShowDialog() = DialogResult.OK Then
         Dim newPath = Get_Upload_Path()
         Dim file = Path.GetFileName(OpenFileDialog1.FileName)
         Dim newUploadName = Path.Combine(newPath, file)
         File.Copy(OpenFileDialog1.FileName, newUploadName)
      End If
    

    【讨论】:

      【解决方案2】:

      最简单的方法是使用 System.IO.FileInfo:

      Dim file as New FileInfo(path)
      file.CopyTo(newPath)
      

      【讨论】:

      • 使用File 类更容易,因为它不需要实例。一行代码比两行代码容易。
      【解决方案3】:

      这个解决方案会奏效,尽量保持原样:

          'Set up and open file dialog
          OpenFileDialog1.Title = "Upload A Song"
          OpenFileDialog1.Filter = "Audio Files|*.mp3; *.wav"
          OpenFileDialog1.Multiselect = False
          OpenFileDialog1.InitialDirectory = "C:\"
          OpenFileDialog1.FileName = String.Empty
      
          'Only proceed if OK pressed
          If OpenFileDialog1.ShowDialog = DialogResult.OK Then
              'Get Destination Path
              Dim Upload_Path As String = IO.Path.Combine(Application.StartupPath, "Resources")
              If IO.Directory.Exists(Upload_Path) Then
                  'Copy file
                  IO.File.Copy(OpenFileDialog1.FileName, IO.Path.Combine(Upload_Path, IO.Path.GetFileName(OpenFileDialog1.FileName)))
              End If
          End If
      

      在您尝试复制之前,我添加了一个检查文件夹是否存在。

      您需要考虑的其他一些事情:

      如果该文件夹不存在,则考虑创建它或发出消息。

      您正在将文件复制到您的应用程序目录。根据您的应用所在的位置,您可能会遇到“权限”问题。

      是否会引用您在工作中加载的原始文件?音频文件的引用列表,加载它们,无需复制,然后在需要时根据需要进行处理?

      【讨论】:

      • 谢谢你一个非常有用的答案!我成功地让它创建并保存我的文件到 bin/resources 文件夹,这是否意味着如果我给用户一个 exe,即使应用程序关闭,它也会保存该文件的副本?
      • 关于您的问题,我已经实施了验证,以创建资源文件夹以防它不存在。不过,我担心许可问题,并且没有真正的知识来解决它。该程序很可能存储在“programfilesx86”文件夹中。你认为我会遇到什么问题吗?如果是这样,我该如何避免它们。 TIA
      【解决方案4】:

      此外,如果您愿意,也可以使用以下命令移动它:

      My.Computer.FileSystem.MoveFile(c:\\source\my.mp3, d:\\destination\my.mp3)
      

      如果没有,请改用 CopyFile。

      【讨论】:

        猜你喜欢
        • 2018-12-29
        • 2012-04-19
        • 2012-11-10
        • 2015-05-07
        • 1970-01-01
        • 2018-10-11
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多