2016-06-02 3 views
0

필자는 필요할 때 git 프로젝트의 백업을 생성하는 프로그램을 만들고 디렉토리 안의 모든 파일과 함께 하나의 디렉토리 안에있는 모든 파일을 복사하려고 시도하고 있습니다. 그러나이 프로그램 예를 들어, 시작 디렉토리 안에있는 파일 내가이 디렉토리가, 그 복사본 만 실행하면Recursivley는 다른 디렉토리 내부의 디렉토리 내부에 파일을 복사합니다.

$ ls 
gen_email.rb* lib/ LICENSE.txt log/ readme.md 
: 나는이 파일 및 디렉토리를 그 디렉토리의 내부

$ ls 
email/ 

lib

내부는 내가

0123이

email/ list.yml modules/ tools/ 

log의 내부가

email_log.LOG 

이제 내부에있는 디렉토리 및 파일과 함께 liblog 안에있는 파일과 함께이 디렉토리 내부의 파일을 복사 할 수 있어야합니다.

'06-02-2016 fl2knjas.z24'/ 

그리고이 내부

은 다음과 같습니다 :이 프로그램을 실행하면

나는 다음과 같은 얻을

gen_email.rb* LICENSE.txt readme.md 

그래서 내 프로그램은 직업하고있다, 그래하지만의 일부를 떠나고있다 디렉토리와 파일 ..

출처 :

using System; 
using System.IO; 

namespace BackupGen 
{ 
    class Program 
    { 
     static void Copy(string strtDir, string destDir) 
     { 
      foreach (var file in Directory.GetFiles(strtDir)) 
       File.Copy(file, Path.Combine(destDir, Path.GetFileName(file))); 

      foreach (var directory in Directory.GetDirectories(strtDir)) 
       Copy(directory, Path.Combine(destDir, Path.GetFileName(directory))); 
     } 

     static void Main(string[] args) 
     { 
      var date = DateTime.Now.ToString("MM-dd-yyyy"); 
      var fileName = Path.GetRandomFileName(); 


      var dir = Directory.CreateDirectory($"{date} {fileName}"); 

      Console.WriteLine("Attempting to create a backup.."); 
      try 
      { 
       Directory.CreateDirectory([email protected]"Z:\backups\{dir}"); 
       Copy(@"C:\Users\git_orgin\email", [email protected]"Z:\backups\{dir}"); 
       Console.WriteLine($"Backup created as {dir}"); 
       Console.ReadLine(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Something went wrong.. {0}", e.ToString()); 
      } 

     } 
    } 
} 

질문 : 내가 어떻게 strtDir 안에 모든 디렉토리를 통해 계속 실행하고 모든 파일을 복사 할 수 있습니까?

+0

이미 System.Diagnostics.Process.Start()가 xcopy 명령을 실행하는 데있어 문제가 있습니다. 이미 재귀 적으로 파일을 복사 할 수 있습니까? –

+0

@EricJ. : 아마 자신의 진도보고 시스템을 구현하고 싶습니까? :) –

+0

위대한 학습 운동,하지만 바퀴가 이미 존재하는 경우, 나는 이것을 지적하고자합니다 :-) –

답변

2

진정으로 git 아카이브를 백업하려면 git의 자체 기능을 호출하는 것이 좋습니다.

git copy source-path target-path 

이렇게하면 공간을 적게 차지할 수있는 베어 복제본을 얻을 수 있으며 복사본은 가능한 빠릅니다.

백업에서 단순히 복제하여 복원하십시오.

+0

흠, 이것에 대해 몰랐다. 그럴 수있어, 고마워. – 13aal

2

이것은 (이진 트리와 같이) 고전적인 트리 문제입니다. 어떤 시점에서 함수를 호출하는 함수 인 함수에 재귀를 작성해야합니다. 다음과 같이하십시오 :

+0

이것은 약간의 프로세스 속도를 죽일 수있는 것처럼 보이지만, 나는 이것을 좋아하고 어떻게 놀라운 일을 할 수 있는지 보게된다. – 13aal

관련 문제