2013-10-09 2 views
0

У меня есть следующий код, который копирует все на нужном месте, за исключением файла 1 Файл 2 Файл & 3.VB.Net как itterate по папкам и скопировать файлы

Источник: «C: \ реж " Target: "C: \ TMP \ Backup"

Public Sub CopyDirectory(source As DirectoryInfo, target As DirectoryInfo) 

    'Recursively call the DeepCopy Method for each Directory 
    For Each MyDir As DirectoryInfo In source.GetDirectories() 
     CopyDirectory(MyDir, target.CreateSubdirectory(projectName & "\" & MyDir.Name)) 
    Next 

    ' Go ahead and copy each file in "source" to the "target" directory 
    For Each MyFile As FileInfo In source.GetFiles() 

     If Not (File.Exists(Path.Combine(target.FullName, MyFile.Name))) Then 
      MyFile.CopyTo(Path.Combine(target.FullName, MyFile.Name)) 
     Else 
      MessageBox.Show("File already exist") 
     End If 

    Next 
End Sub 

Файл 1, 2 & 3 должен войти внутрь "Dir" папку, но она продолжает появляться в папке "Backup".

C:\ 
|_ tmp 
    |_ Backup 
     |_ Dir 
      |_ Folder 1 
       |_ File 11 
       |_ File 12 
       |_ File 13 
      |_ Folder 2 
       |_ File 21 
       |_ File 22 
       |_ File 23 
      |_ Folder 3 
       |_ File 31 
       |_ File 32 
       |_ File 33 

     |_ File 1 
     |_ File 2 
     |_ File 3 

Как я могу убедиться, что файлы 1, 2 и 3 скопированы внутри папки «Dir»?

+0

проверить, что target.CreateSubdirectory (Projectname & "\" & MyDir.Name) возвращает DirInfo, для которых каталог – Patel

+0

Что такое переменная 'projectName' ? Он не находится в списке параметров или определен в вашей функции. Является ли это переменной-членом вашего класса? – mortb

+0

Что такое путь к исходному файлу для file1, file2, file3? –

ответ

0

Я думаю, ваша проблема заключается в этой строке:

CopyDirectory(MyDir, target.CreateSubdirectory(projectName & "\" & MyDir.Name)) 

Я понимаю, что вы хотите создать новую папку на цели. Для этого вы сделаете это:

CopyDirectory(MyDir, target.CreateSubdirectory(MyDir.Name)) 

Ehm right. Пропущенный эту строку:

Источник: "C: \ реж" Target: "C: \ TMP \ Backup"

Ваша программа делает именно то, что вы говорите это делать. Возьмите файлы в директории и поместите в резервную копию. Если вы хотите, чтобы это изменилось, вам нужно установить цель в C: \ temp \ Backup \ dir, когда вы начнете первую рекурсию.

0

Код был изменен ниже. Спасибо WozzeC.

Final Код:

    fullPath = Path.GetFullPath(txtSLocation1.Text).TrimEnd(Path.DirectorySeparatorChar) 
       projectName = Path.GetFileName(txtSLocation1.Text) 

       Dim SourcePath As New IO.DirectoryInfo(txtSLocation1.Text) 
       Dim DestPath As New IO.DirectoryInfo(txtDLocation1.Text & "\" & projectName) 

       DestString = txtDLocation1.Text & "\" & projectName 
       CopyDirectory(SourcePath, DestPath) 

CopyDirectory

Public Sub CopyDirectory(source As DirectoryInfo, target As DirectoryInfo) 


    If (Not System.IO.Directory.Exists(DestString)) Then 
     System.IO.Directory.CreateDirectory(DestString) 
    End If 

    'Recursively call the DeepCopy Method for each Directory 
    For Each MyDir As DirectoryInfo In source.GetDirectories() 
     CopyDirectory(MyDir, target.CreateSubdirectory(MyDir.Name)) 
    Next 

    ' Go ahead and copy each file in "source" to the "target" directory 
    For Each MyFile As FileInfo In source.GetFiles() 

     If Not (File.Exists(Path.Combine(target.FullName, MyFile.Name))) Then 
      MyFile.CopyTo(Path.Combine(target.FullName, MyFile.Name)) 
     Else 
      MessageBox.Show("File already exist") 
     End If 
    Next 
End Sub 
Смежные вопросы