jameslooi88 Ответов: 2

vb.net как скопировать файл из одного каталога в другой каталог, создав папку, если эта папка не существует


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

RDBurmon

Удалены ненужные теги и добавлены правильные теги .
обновлено для исправления грамматики.

2 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

У меня есть одно важное дополнение к решению 1.

Проверка того, существует ли уже каталог, является абсолютно избыточной. Вам просто нужно создать каталог безоговорочно. Если каталог уже существует, Directory.CreateDirectory все равно будет работать правильно.

—СА


Рейтинг:
17

RDBurmon

Это должно сработать

Imports System.IO

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim sourcepath As String = "E:\temp\test\1.txt"
        Dim DestPath As String = "E:\Data\"
        CopyDirectory(sourcepath, DestPath)

    End Sub




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

        For Each file__1 As String In Directory.GetFiles(Path.GetDirectoryName(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(Path.GetDirectoryName(sourcePath))
            Dim dest As String = Path.Combine(destPath, Path.GetFileName(folder))
            CopyDirectory(folder, dest)
        Next
    End Sub
End Class


Я сменил "директорию.GetDirectories(sourcePath)"

к

"Каталог.GetDirectories(Path.GetDirectoryName(sourcePath))"


Надеюсь это поможет если да то примите и проголосуйте за ответ в противном случае вернитесь обратно с вашими запросами
--Рахул Д.


Member 13252914

можете ли вы plz настроить этот код для меня так, чтобы он копировал только один файл вместо всех файлов в папке