Как скопировать файл из одного каталога в другой, создав папку, если эта папка не существует - PullRequest
6 голосов
/ 09 февраля 2012

У меня возникла проблема с копированием файла из одного каталога в другой каталог путем создания папки, если эта папка не существует в каталоге назначения.

Пример:

  • Исходный путь: C:\temp\test\1.txt
  • Путь назначения: C:\Data\

Если C:\Data\ не содержит папку «temp» или «test», она должна создать папку перед копированием 1.txt.

Скопировано в C:\Data\temp\test\1.txt

Ниже мой код. Но это не работает ..

Private Sub btnBackup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBackup.Click
          Dim sourcepath As String = "C:\temp\test\1.txt"
    Dim DestPath As String = "C:\Data\"
    CopyDirectory(sourcepath, DestPath)
End Sub

Private Shared Sub CopyDirectory(sourcePath As String, destPath As String)
    If Not Directory.Exists(destPath) Then
        Directory.CreateDirectory(destPath)
    End If

    For Each file__1 As String In Directory.GetFiles(sourcePath)
        Dim dest As String = Path.Combine(destPath, Path.GetFileName(file__1))
        File.Copy(file__1, dest)
    Next

    For Each folder As String In Directory.GetDirectories(sourcePath)
        Dim dest As String = Path.Combine(destPath, Path.GetFileName(folder))
        CopyDirectory(folder, dest)
    Next
End Sub

Ответы [ 2 ]

9 голосов
/ 09 февраля 2012

Это не каталог.

Dim sourcepath As String = "C:\temp\test\1.txt"

Поскольку вы используете его как каталог в Directory.GetFiles(sourcePath).

Кроме того, я рекомендую более подробно проработать ваши вопросы в следующий раз. Код вызывает значимые исключения, такие как DirectoryNotFoundException с подходящим путем в качестве сообщения или (если файл существует) * IOException с сообщением «Недопустимое имя каталога» . Вы должны были добавить это к вопросу.

Таким образом, решение просто состоит в том, чтобы удалить 1.txt из имени каталога:

Dim sourcepath As String = "C:\temp\test\"

Если вам нужно скопировать только один файл, используйте Метод CopyTo :

Dim sourcepath As String = "C:\temp\test\"
Dim DestPath As String = "C:\temp\Data\"
If Not Directory.Exists(DestPath) Then
    Directory.CreateDirectory(DestPath)
End If
Dim file = New FileInfo("C:\temp\test\1.txt")
file.CopyTo(Path.Combine(DestPath, file.Name), True)
0 голосов
/ 28 апреля 2016
    Dim strMasterResourceDirectory As String
    Dim strDirectory As String

    strDirectory = "C:\TestDestination"
    strMasterResourceDirectory = "TestResource"

   If My.Computer.FileSystem.DirectoryExists(strDirectory) = False Then
        My.Computer.FileSystem.CreateDirectory(strDirectory)
    End If

    ' Loop through each file in the directory
    For Each file As IO.FileInfo In New IO.DirectoryInfo(strDirectory).GetFiles

        If file.Name <> "Thumbs.db" Then

            System.IO.File.Delete(strDirectory & "\" & file.Name)

        End If
    Next

    ' Loop through each file in the directory
    For Each file As IO.FileInfo In New IO.DirectoryInfo(strMasterResourceDirectory).GetFiles

        If file.Name <> "Thumbs.db" Then

            ' copy resource to users local directory

            file.CopyTo(strDirectory & "\" & file.Name)

        End If
    Next
...