2012-02-09 13 views
6

Mam problem z kopiowaniem pliku z jednego katalogu do innego przez utworzenie folderu, jeśli ten folder nie istnieje w katalog docelowy.Jak skopiować plik z jednego katalogu do innego katalogu, tworząc folder, jeśli ten folder nie istnieje

Przykład:

  • ścieżka Źródło: C:\temp\test\1.txt
  • ścieżka Destination: C:\Data\

Jeśli C:\Data\ nie zawiera "Temp" lub folderu "test", należy utworzyć folder przed radzenie sobie z 1.txt.

skopiowane do C:\Data\temp\test\1.txt

Poniżej jest mój kod. Ale to nie działa ..

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 
+0

jakieś błędy? i używasz XP lub Windows 7 –

+4

Zwroty typu "to nie działa" powinny być blokowane przez SO podczas wysyłania pytania;) –

Odpowiedz

9

Poniższy katalog nie jest katalogiem.

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

Ponieważ używasz go jako katalogu w Directory.GetFiles(sourcePath).

Poza tym zalecam, aby następnym razem rozwinąć swoje pytania. Kod wywołuje znaczące wyjątki, takie jak DirectoryNotFoundException z odpowiednią ścieżką jako wiadomość lub (jeśli plik istnieje), IOException z komunikatem "Nazwa katalogu jest nieprawidłowa". Powinieneś dodać to do pytania.

Więc po prostu rozwiązaniem jest usunięcie 1.txt z katalogu-name:

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

Jeśli chcesz skopiować tylko jeden plik, użyj CopyTo method:

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

Mam dużo pliku tekstowego, ale chcę skopiować tylko plik 1.txt. – user1101157

+0

@ user1101157: Zaktualizowałem moją odpowiedź. –

0
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 
+0

Witamy w StackOverflow! Proszę rozważyć dodanie trochę wyjaśnienia do swojego kodu. Dziękuję Ci! – Aurasphere

Powiązane problemy