> 백엔드 개발 > C++ > FileStream을 사용하지 않고 .NET에서 MemoryStream을 사용하여 ZIP 아카이브를 만들 수 있습니까?

FileStream을 사용하지 않고 .NET에서 MemoryStream을 사용하여 ZIP 아카이브를 만들 수 있습니까?

Linda Hamilton
풀어 주다: 2025-01-06 22:54:41
원래의
393명이 탐색했습니다.

Can I Create a ZIP Archive Using MemoryStream in .NET Without Using FileStream?

MemoryStream을 사용하여 ZIP 아카이브 만들기

.NET에서 데이터 작업의 흥미로운 측면 중 하나는 메모리에서 데이터를 조작할 수 있다는 것입니다. 이러한 맥락에서 MemoryStream 개체를 사용하여 데이터를 저장하고 디스크의 파일 동작을 모방하는 것이 일반적입니다. 그러나 ZIP 아카이브를 생성하는 경우 MemoryStream 사용과 관련된 주의 사항이 있는 것 같습니다.

다음 시나리오를 고려하십시오. MemoryStream을 사용하여 ZIP 아카이브를 생성하려는 시도와 텍스트에 대한 후속 쓰기 작업 아카이브 내의 파일이 불완전한 아카이브 파일이 되고 텍스트 파일이 눈에 띄게 없습니다. 그러나 FileStream을 직접 사용하면 아카이브가 성공적으로 생성됩니다. 이러한 불일치로 인해 ZIP 아카이브 생성에 MemoryStream을 사용하고 FileStream 접근 방식을 피할 수 있는지에 대한 의문이 제기됩니다.

답은 아카이브 생성에 사용되는 ZipArchive 클래스의 복잡성을 이해하는 데 있습니다. 결과적으로 ZipArchive 생성자에는 추가 매개변수인 LeaveOpen이 있으며 기본값은 false입니다. 이 매개변수를 true로 설정하면 폐기 시 아카이브가 닫히는 것을 방지하여 추가 조작이 가능합니다. 아카이브 쓰기 프로세스에서는 완전한 것으로 간주되기 전에 체크섬과 같은 최종 정보를 추가해야 하기 때문에 이 동작이 필수적입니다.

이를 달성하기 위해 제공된 코드 샘플을 다음과 같이 수정할 수 있습니다.

using (var memoryStream = new MemoryStream())
{
    using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
    {
        var demoFile = archive.CreateEntry("foo.txt");

        using (var entryStream = demoFile.Open())
        using (var streamWriter = new StreamWriter(entryStream))
        {
            streamWriter.Write("Bar!");
        }
    }

    memoryStream.Seek(0, SeekOrigin.Begin);
    using (var fileStream = new FileStream("C:\Temp\test.zip", FileMode.Create))
    {
        memoryStream.CopyTo(fileStream);
    }
}
로그인 후 복사

이 수정된 코드에서 LeaveOpen을 true로 설정하면 아카이브가 열린 상태로 유지되고 후속 Seek 작업을 통해 메모리 내 아카이브가 완전한 형태로 파일 스트림에 기록될 준비가 됩니다. ZIP 아카이브. 이 접근 방식은 MemoryStream을 사용할 때 아카이브에서 파일이 누락되는 문제를 해결합니다.

위 내용은 FileStream을 사용하지 않고 .NET에서 MemoryStream을 사용하여 ZIP 아카이브를 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿