본문 바로가기
C#

C# 파일 압축하기

by 위ㄱㅎ 2020. 3. 7.

원하는 파일들만 필터링하여 압축한다.

 

1. 지정한 폴더의 필터를 걸어 파일의 리스트를 가져온다.

2. 해당 파일들을 압축한다.

3. 압축한 파일들을 삭제한다.

public List<string> GetDirectoryFileList(string directory, string filter)
{
    if (Directory.Exists(directory))
    {
        DirectoryInfo di = new DirectoryInfo(directory);
        List<string> fileNames = new List<string>();
        foreach (var file in di.GetFiles(filter))
        {
            fileNames.Add(file.Name);
        }
        return fileNames;
    }
    else
    {
        return null;
    }
}
public void DeleteFile(string file)
{
    try
    {
        File.Delete(file);
    }
    catch (FileNotFoundException)
    {
        return;
    }
}
//archiveFileDirectory : 압축하고 싶은 파일들이 있는 경로
//archivedDirectoryFileName : 압축파일경로 및 이름
//filter : 압축하고 싶은 파일이름 필터 ex) *.json
public void Archive(string archiveFileDirectory, string archivedDirectoryFileName, string filter)
{
    if (GetDirectoryFileList(archiveFileDirectory, filter).Count == 0)
    {
        return;
    }
    using (FileStream zipToOpen = new FileStream($"{archivedDirectoryFileName}.zip", FileMode.CreateNew))
    {
        using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
        {
            foreach (var filePath in Directory.EnumerateFiles(archiveFileDirectory, filter))
            {
                ZipFileExtensions.CreateEntryFromFile(archive, filePath, filePath.Substring(filePath.LastIndexOf("/")));
                DeleteFile(filePath);
            }
        }
    }
}

'C#' 카테고리의 다른 글

C# 파일 내용 검색  (0) 2020.03.07
C# Xml의 노드의 값 일괄 변환  (0) 2020.03.07

댓글