본문 바로가기

Windows Phone 7

Windows Phone 7에서 격리된 저장소의 압축파일을 SharpZipLib 활용하여 읽기(AS)

지난번 Windows Phone 7 에서 압축파일을 읽는 방법에 대한 글을 포스팅한 적이 있습니다. (보지 못하신 분은 [Windows Phone 7] - Windows Phone 7 에서 ZIP 압축파일 읽기 를 보시면 되겠습니다.)
압축파일을 프로젝트에 추가해서 GetResourceStream 메서드를 이용하여 압축된 파일에 대한 Stream 객체를 얻고,
그 Stream 객체를 이용하여 ZipFile 클래스의 인스턴스를 생성하였는데요.

이번에 프로젝트 구현시에 격리된 저장소(Isolated Storage)에 저장된 파일을 IsolatedStorageFileStream 형태로 읽어서, 그 Stream을 ZipFile 클래스의 인스턴스 생성시 이용하고자 하니, 문제가 발생하였습니다.
SharpZipLib에서 따로 오류는 발생하지 않으나, 객체를 생성하는 과정에서 프로그램이 응답없음 상태로 빠지고 말더군요.

고민하다가, IsolatedStorageFileStream을 MemoryStream으로 옮겨서, 이 MemoryStream 을 이용하여 ZipFile 클래스의 인스턴스를 생성하는 방식으로 문제를 해결하였습니다.

코드는 아래와 같습니다.

System.IO.IsolatedStorage.IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();

 

string localPath = "SamplePictures.zip";

 

using (MemoryStream mStream = new MemoryStream())

{

    using (IsolatedStorageFileStream isfStream = new IsolatedStorageFileStream(localPath, FileMode.Open, isf))

    {

        int bufferSize = 40 * 1024;

        byte[] buffer = new byte[bufferSize];

        int readBytes = 0;

 

        do

        {

            readBytes = isfStream.Read(buffer, 0, bufferSize);

            mStream.Write(buffer, 0, readBytes);

 

        } while (readBytes > 0);

    }

 

    ZipFile zipFile = new ZipFile(mStream);

}


코드에서 보면 격리된 저장소에 있는 SamplePictures.zip 파일을 IsolatedStorageFileStream 을 이용하여 읽어 MemoryStream으로 옮겨서 그 MemoryStream을 이용하여 ZipFile 객체를 생성하고 있습니다.

위와 같이 하시면, 격리된 저장소에 있는 압축파일(Zip파일)도 문제없이 사용하실 수 있습니다.