2017-04-02 4 views
0
private void btn_Backup_Click(object sender, EventArgs e) 
    { 
     List<DirectoryInfo> SourceDir = this.lbox_Sources.Items.Cast<DirectoryInfo>().ToList(); 
     string TargetDir = this.tbox_Target.Text; 

     foreach (DirectoryInfo directory in SourceDir) 
     { 
      foreach (var file in directory.GetFiles()) 
       if (this.checkbox_zipfiles.Checked == true) 
       { 
        System.IO.Compression.ZipFile.CreateFromDirectory(directory.FullName, TargetDir + @"\test.zip"); 
       } 
       else 
       { 
        Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(directory.FullName, TargetDir, true); 
       } 
     } 
    } 

백업 응용 프로그램을 만들 때 백업해야하는 파일을 압축하려고 할 때 "파일 'C : \ Users \ Lada1208 \ Desktop \ test \ test가 표시됩니다. zip '이 (가) 이미 있습니다. " 심지어 전에 폴더가 비어 있다고 생각했기 때문에 어떤 이유로 든 test.zip 파일을 두 번 만들려고합니다. 왜 그런가?IOException 파일이 이미 있습니다. C#

+1

글쎄, 네 코드가 각 디렉토리에 같은 이름의 우편 번호를 만들려고하지 않습니까? 한 번 파일을 만든 다음 파일을 추가하기로되어 있지 않습니까? 또는 각 디렉토리마다 다른 이름을 선택합니까? –

답변

0

s.m.에서 지적한 바와 같이. 위의 주석에서 ZipFile.CreateFromDirectory()를 호출하면 모든 소스 디렉토리에 대해 동일한 위치와 파일 이름을 가진 zip 파일을 만들려고 시도합니다.

모든 소스 디렉토리에서 파일을 포함하는 단일 아카이브를 만들려는 경우 Zipfile.CreateFromDirectory() "바로 가기"메소드를 사용할 수 없습니다. 대신 ZipFile.Open()을 호출하고 ZipArchive 객체를 가져와 CreateEntry() 메서드를 사용하여 모든 파일을 개별적으로 추가해야합니다.