Microsoft .NET/C#

[C#] 폴더 압축 / 다중 파일 압축 / 압축 해제

전자기린 2020. 1. 6. 15:57

1. 폴더 압축

//폴더 압축
string folderPath = folderSelectorDialog.FileName;
string savePath = folderSelectorDialog.FileName + ".zip";
System.IO.Compression.ZipFile.CreateFromDirectory(folderPath, savePath);

 

2. 다중 파일 압축

private void btnCompress_Multiple_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog() { Multiselect = true};

    if (ofd.ShowDialog() == true)
    { 
        FileCompression_Multiple(ofd.FileNames);
    }
}



public bool FileCompression_Multiple(string[] files)
{
    //예외처리
    if (files == null)      return false;
    if (files.Length == 0)  return false;


    FileInfo fi = new FileInfo(files[0]);
    string parentFolderPath = fi.DirectoryName;
    string tempFolderName = fi.Name.Split('.')[0];
    DirectoryInfo di = new DirectoryInfo(parentFolderPath + "\\" + tempFolderName);

    //첫번째 파일의 명을 가지고 폴더를 생성하므로 동일한 폴더가 없는지 체크 후 압축함.
    if (di.Exists == false)
    {
        //폴더 생성
        di.Create();

        //선택 파일 폴더로 이동
        foreach (var filePath in files)
        {
            FileInfo f = new FileInfo(filePath);
            System.IO.File.Copy(filePath, di.FullName + "\\" + f.Name);
        }

        //폴더 압축
        System.IO.Compression.ZipFile.CreateFromDirectory(di.FullName, di.FullName+".zip");

        //임시 생성 폴더 삭제
        di.Delete(true);
        return true;
    }

    return false;
}

 

3. 압축 해제

//압축 해제
System.IO.Compression.ZipFile.ExtractToDirectory(cofd.FileName, cofd.FileName.Replace(".zip", ""));