2011-04-26 2 views
3

Windows Phone 7 프로젝트에 zip 파일이 있습니다. Build Action을 Content로 설정하고 Copy to output 디렉토리를 Always로 설정했습니다. zip 파일에는 폴더 구조가 들어 있습니다. 나는 이것이 Phone Project에있는 그대로 복사되도록하고 싶다. 나는 이것을 위해 SharpZipLib을 사용하고있다. 이 코드는 다음과 같습니다. -Windows Phone 7에서 압축 파일을 어떻게 추출합니까?

Stream stremInfo = Application.GetResourceStream(new Uri("xip.zip", UriKind.Relative)).Stream; 



     new FastZip(). ExtractZip(stremInfo, 
      "",FastZip.Overwrite.Always,null,null,null,true,true); 

그러나 ExractZip을 호출하면 오류가 발생합니다. 예외는 "MethodAccessException"입니다. GetFullPath()으로 전화 할 수 없습니다. 아무도 내가 뭘 놓치고 있는지 알려 줄 수 있니? 그것을 피하려면 어떻게해야합니까?

답변

1

나는이 작업을 수행 할 SharpZipLib의 SL 포트를 사용했습니다 - 자신의 소스에 좋은 퀵 스타트 - - http://slsharpziplib.codeplex.com/

있다 그것을 사용하는 방법에 해당하는 예제 코드를 많이 볼 수 http://slsharpziplib.codeplex.com/SourceControl/changeset/view/75568#1416103

+0

slsharpziplib is 서투른. 나는 하루 종일 노력했지만 제대로 작동하지 못했습니다. IsolatedFastZip()의 CreateZip 메서드가 호출 될 때 어떤 예외가 발생했습니다. wilbev의 제안은 문서 및 API를 읽는 데 너무 많은 시간을 낭비하지 않고 내용을 압축 해제하려는 경우에 가장 좋습니다. 수업은 정말 간단하고 일을 조용하게합니다. – TCM

+0

죄송합니다 - 유용하지만 - 많은 문제가 있다는 말을 듣고 싶습니다. ICSharpZipLib은 "오랜 친구"입니다. "수십"의 프로젝트에서 사용했습니다. 그러나 내 코드는 대부분 "메모리 내"압축 해제에 대한 의견입니다. 피드백에 감사드립니다. "디스크 기반"압축이 필요한 경우 다른 프로젝트를보고 시간을 절약하십시오. – Stuart

7

Zip에서 원하는 파일을 알고 있다면 다른 라이브러리를 사용할 필요가 없습니다. App.GetResourceStream 전화 API를 사용하여 Zip에 도달하고 파일을 가져올 수 있습니다. this blog post을 확인 우편 일부터 파일의 목록을 읽기에 대한 자세한 informaiton 들어

void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    WebClient client = new WebClient(); 
    client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); 
    client.OpenReadAsync(new Uri("http://www.foo.com/pictures.zip")); 
} 

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    StreamResourceInfo info = new StreamResourceInfo(e.Result,""); 
    StreamResourceInfo pic = App.GetResourceStream(info, new Uri("IMG_1001.jpg", UriKind.Relative)); 

    BitmapImage bitmap = new BitmapImage(); 
    bitmap.SetSource(pic.Stream); 
    img.Source = bitmap; 
} 

.

+1

나는이 방법을 안다. 그러나 내 우편은 내가 모르는 폴더가 포함되어 있습니다. – TCM

+0

이 메서드의 또 다른 한계 : GetResourceStream() 메서드가 내부 메모리 스트림 (메모리로 전체 파일로드)을 생성한다고 생각합니다. WPF의 큰 .zip 파일과 함께 GetResourceStreawm()을 사용할 때 OutOfMemoryExceptions가 표시되지만 작은 파일도 정상적으로 작동합니다. –