2014-09-26 13 views
0

Я пытаюсь скопировать каталог в другой каталог, используя следующий код, но по какой-то причине он копирует только содержимое каталога, а не самого каталога.Копировать каталог не работает

 Try 
     My.Computer.FileSystem.CopyDirectory(TextBox1.Text, My.Settings.FSXLocation & "\SimObjects\Airplanes", True) 
     MsgBox("Your 737-800 Aircraft has now been Installed.", MsgBoxStyle.Information, "Figerty Systems Inc") 
    Catch ex As Exception 
     MsgBox(ex.Message, MsgBoxStyle.Critical, "Figerty Systems Inc.") 
    End Try 

У кого-нибудь есть идеи?

Редактировать - больше кода:

 Try 
     Dim arg = String.Format("{0} {1} /i/y/s/e/D", Path.GetFullPath(TextBox1.Text), Path.GetFullPath(My.Settings.FSXLocation & "\SimObjects\Airplanes")) 
     Dim p = New Process() 
p.StartInfo = New ProcessStartInfo() With { _ 
    Key .FileName = "xcopy", _ 
    Key .Arguments = arg, _ 
    Key .UseShellExecute = False, _ 
    Key .RedirectStandardOutput = True _ 
} 
     p.Start() 
     Console.WriteLine(p.StandardOutput.ReadToEnd()) 
     p.WaitForExit() 
    Catch ex As Exception 
     Console.WriteLine("[FAIL] COPY: {0}", ex.Message) 
     Throw 
    End Try 

ответ

0

Windows API не поддерживает каталог копирования рекурсивно. я просто покажу вам код Csharp:

 try { 
      var arg = string.Format("{0} {1} /i/y/s/e/D", Path.GetFullPath("../www"), Path.GetFullPath("./EM/www")); 
      var p = new Process(); 
      p.StartInfo = new ProcessStartInfo { 
       FileName = @"xcopy", 
       Arguments = arg, 
       UseShellExecute = false, 
       RedirectStandardOutput = true 
      }; 
      p.Start(); 
      Console.WriteLine(p.StandardOutput.ReadToEnd()); 
      p.WaitForExit(); 
     } catch (Exception ex) { 
      Console.WriteLine("[FAIL] COPY: {0}", ex.Message); 
      throw; 
     } 

мая это помогает.

+0

Благодаря noncast. Я преобразовал этот код в Visual Basic, но получаю сообщение о том, что первый ключ должен начинаться с символа '.' – user3719039

+0

показать мне свой код. – nonocast

+0

Hi @nomcast Я отправил код в новый ответ, поскольку я не смог опубликовать его здесь. – user3719039

0

Посмотрите на this. Это уже реализовано для вас. Но если вы ДЕЙСТВИТЕЛЬНО хотели изобрести колесо, я бы взглянул на рекурсию, если бы я был вами.

+0

Кроме того, предложение xcopy прекрасно, но похоже, что это злоупотребление Process.Start(). Я бы зарезервировал Process.Start() для таких задач, как перезапуск процесса после его убийства или запуск другого приложения, которое вы написали или используете. Это похоже на злоупотребление системой() в сообществе C++. – scottyeatscode

0

это мой первый раз, чтобы написать код vb.net,

Импорт System.IO

Module Module1 

    Sub Main() 
    Try 
     Dim arg = String.Format("{0} {1} /i/y/s/e/D", Path.GetFullPath("src"), Path.GetFullPath("dest")) 
     Dim p = New Process() 
     p.StartInfo = New ProcessStartInfo() With { 
      .FileName = "xcopy", 
      .Arguments = arg, 
      .UseShellExecute = False, 
      .RedirectStandardOutput = True 
     } 

     p.Start() 
     Console.WriteLine(p.StandardOutput.ReadToEnd()) 
     p.WaitForExit() 
    Catch ex As Exception 
     Console.WriteLine("[FAIL] COPY: {0}", ex.Message) 
     Throw 
    End Try 
    End Sub 

End Module 
Смежные вопросы