Метод Directory.GetFiles не работает в VB - PullRequest
0 голосов
/ 11 апреля 2020

Я создал программное обеспечение с Visual Builder, которое очищает ваш рабочий стол. Я использовал метод Directory.GetFiles для перемещения типов файлов в определенные каталоги. Когда я впервые написал код, он работал нормально, хотя затем я получил сообщение «1001», которое я не уверен, как исправить, когда создаю каталог для файлов с отдельными кнопками, как видно из кода.

У меня также есть проблемы с другими кнопками, которые могут быть результатом другой ошибки. Когда я go очищаю ярлыки, которые я запрограммировал для перемещения файлов .lnk в папку ярлыков, ни один из них не перемещается в эту папку, если они ранее не находились в этой папке.

Полный код

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs)
        MessageBox.Show("Desktop Cleaned")
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim filePaths = IO.Directory.GetFiles("C:\Users\bj\Desktop\", "*.png")

        For Each filePath In filePaths
            Dim filename = IO.Path.GetFileName(filePath)
            Dim newPath = IO.Path.Combine("C:\Users\bj\Desktop\Pictures", filename)

            IO.File.Move(filePath, newPath)

        Next filePath

        Dim filePaths2 = IO.Directory.GetFiles("C:\Users\bj\Desktop\", "*.jpg")

        For Each filePath2 In filePaths2
            Dim filename2 = IO.Path.GetFileName(filePath2)
            Dim newPath2 = IO.Path.Combine("C:\Users\bj\Desktop\Pictures", filename2)

            IO.File.Move(filePath2, newPath2)

        Next filePath2

        MessageBox.Show("Pictures Compiled And Cleaned")
    End Sub

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

        Dim filePaths3 = IO.Directory.GetFiles("C:\Users\bj\Desktop\", "*.lnk")

        For Each filePath3 In filePaths3
            Dim filename3 = IO.Path.GetFileName(filePath3)
            Dim newPath3 = IO.Path.Combine("C:\Users\bj\Desktop\Shortcuts", filename3)

            IO.File.Move(filePath3, newPath3)

        Next filePath3

        Dim filePaths6 = IO.Directory.GetFiles("C:\Users\bj\Desktop\", "*.url")

        For Each filePath6 In filePaths6
            Dim filename6 = IO.Path.GetFileName(filePath6)
            Dim newPath6 = IO.Path.Combine("C:\Users\bj\Desktop\Shortcuts", filename6)

            IO.File.Move(filePath6, newPath6)

        Next filePath6

        MessageBox.Show("Shortcuts Compiled And Cleaned")
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click


        Dim filePaths4 = IO.Directory.GetFiles("C:\Users\bj\Desktop\", "*.mp4")

        For Each filePath4 In filePaths4
            Dim filename4 = IO.Path.GetFileName(filePath4)
            Dim newPath4 = IO.Path.Combine("C:\Users\bj\Desktop\Videos", filename4)

            IO.File.Move(filePath4, newPath4)

        Next filePath4

        Dim filePaths5 = IO.Directory.GetFiles("C:\Users\bj\Desktop\", "*.avi")

        For Each filePath5 In filePaths5
            Dim filename5 = IO.Path.GetFileName(filePath5)
            Dim newPath5 = IO.Path.Combine("C:\Users\bj\Desktop\Videos", filename5)

            IO.File.Move(filePath5, newPath5)

        Next filePath5

        MessageBox.Show("Videos Compiled And Cleaned")

    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        My.Computer.FileSystem.CreateDirectory(
"C:\Users\bj\Desktop\Shortcuts")
    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        My.Computer.FileSystem.CreateDirectory(
"C:\Users\bj\Desktop\Videos")
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        My.Computer.FileSystem.CreateDirectory(
"C:\Users\bj\Desktop\Pictures")
    End Sub
End Class

Код ошибки

IO.File.Move(filePath, newPath) Возвращает ошибку,

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim filePaths = IO.Directory.GetFiles("C:\Users\bj\Desktop\", "*.png")

        For Each filePath In filePaths
            Dim filename = IO.Path.GetFileName(filePath)
            Dim newPath = IO.Path.Combine("C:\Users\bj\Desktop\Pictures", filename)

            IO.File.Move(filePath, newPath)

        Next filePath

Сообщение об ошибке: System.IO.IOException: 'Cannot create a file when that file already exists.

1 Ответ

0 голосов
/ 11 апреля 2020

Посмотрите на документацию для File.Move - пример кода проверяет, существует ли файл первым, и удаляет его

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

If IO.File.Exists(newPath) Then
    Dim dr = MessageBox.Show($"File {newPath} exists, do you want to keep both files? The recently moved file will have a number added to its name", "", MessageBoxButtons.YesNoCancel)

    Select dr 
      Case DialogResult.Cancel
        Continue 'go to next loop iteration

      Case DialogResult.No
        IO.File.Delete(newPath)

      Case DialogResult.Yes 'keep both

        'Make the path eg kitten.1.jpg, kitten.2.jpg until we find a free name
        Dim x = 0
        Do
          x += 1
          newPath = IO.Path.ChangeExtension(newPath, i & IO.Path.GetExtension(newPath))
        While IO.File.Exists(newPath)

    End Select

End If
...