VB.net Как скопировать файл в новое место - PullRequest
0 голосов
/ 09 октября 2018

Итак, я работаю над проектом с целью позволить моему пользователю выбрать из этого файла личные файлы в формате 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

Я пробовал несколько методов, чтобы попытаться заставить его копировать, однако я не могу найти способ скопировать файл в каталог.Если кто-то может дать какое-либо представление о том, как я могу достичь этого, это будет очень ценно.

Ответы [ 4 ]

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

Кроме того, если вы хотите, вы также можете переместить его с помощью:

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

Если нет, используйте вместо этого CopyFile.

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

Первое, что нужно исправить, - это ваш 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
0 голосов
/ 09 октября 2018

Это решение будет работать, пытаясь сохранить все как можно ближе к оригиналу:

    '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

Я добавил проверку, что папка существует, прежде чем пытаться скопировать.

Некоторые другие вещи, о которых вам нужно подумать:

Если папка не существует, подумайте о ее создании или выдаче сообщения.

Вы копируете файл в каталог приложений.,В зависимости от того, где находится ваше приложение, вы можете получить проблему с разрешением.

Будет ли ссылка на исходные файлы, которые вы загружаете в работе?Список ссылок на аудиофайлы, загрузить их без копирования, а затем обработать по мере необходимости, когда придет время?

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

Самый простой способ сделать это, используя System.IO.FileInfo:

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