로컬 SQLite 데이터베이스를 사용하는 Windows Phone 7 프로젝트를 개발 중입니다. 데이타베이스는 압축되지 않은 ~ 40MB이므로 최대 압축 (압축)을 사용하여 ~ 20MB까지 압축했습니다. 여기에 내 코드가있다.Windows Phone 7에서 LZMA 압축 zip 파일을 압축 해제하는 방법은 무엇입니까?
private void unzip_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = (BackgroundWorker)sender;
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream file = new IsolatedStorageFileStream(filename, FileMode.Create, store);
// TODO: switch from Deflate ~18.7MB to LZMA ~12.1MB (original ~41.5MB)
StreamResourceInfo zipInfo = new StreamResourceInfo((Stream)e.Argument, null);
StreamResourceInfo streamInfo = Application.GetResourceStream(zipInfo, new Uri(filename, UriKind.Relative));
long total = streamInfo.Stream.Length;
long done = 0;
int size = 32768;
byte[] data = new byte[size];
while ((size = streamInfo.Stream.Read(data, 0, data.Length)) > 0)
{
file.Write(data, 0, size);
done += size;
int percentComplete = (int)(100 * ((float)done/(float)total));
worker.ReportProgress(percentComplete);
}
file.Close();
}
20메가바이트 좋은 개선하지만 최대 압축 (LZMA)를 사용하여 7Z 아카이브 ~ 12메가바이트의 파일 크기를 얻을 것으로 나타났습니다. zip 파일 형식은 LZMA 내용을 지원하므로 LZMA 압축 zip 파일의 Deflate 압축 zip 파일을 전환하고 bang을 전환했습니다. 내가 얻을 NullReferenceException : Application.GetResourceStream(...)
null을 반환합니다. 아마도 그 구현은 LZMA 콘텐츠를 처리하지 못할 것입니다.
다른 라이브러리를 사용해 보았지만 Deflated zip에서 제대로 작동했지만 LZMA zip (NotSupportedException : 압축 방법이 지원되지 않음)에서 다시 실패합니다.
using ICSharpCode.SharpZipLib.Zip;
...
private void unzip_DoWork(object sender, DoWorkEventArgs e)
{
...
using (ZipInputStream zip = new ZipInputStream((Stream)e.Argument))
{
ZipEntry entry = zip.GetNextEntry(); // consume zip header (required)
....
}
}
내가 NuGet에서 보면서 LZMA 압축 해제를 지원하기 위해 주장 약간의 C# 라이브러리가 있지만, 그들은 내 Windows Phone 프로젝트와 호환되지 있었다 (나는 .NET3 또는 위해 설정 된 때문에 생각합니다. NET4는 아니지만 .NET 3.5).
LZMA SDK를 사용하여 ICSharpCode.SharpZipLib.LZMA 클래스를 구현할 생각이 들었지만 바퀴를 다시 만들기 전에 누군가 Windows Phone에서 LZMA zip을 성공적으로 압축 해제했는지 묻는 것이 좋습니다.
도움을 주시면 감사하겠습니다.