2017-12-12 10 views
1

다른 파일을 포함하는 Zip 파일을 만들기로되어있는 코드를 직접 작성했습니다. 이 파일은 캔버스에서 작성됩니다. 그러나 생성 된 zip 파일은 비어 있으며 아무것도 포함하지 않습니다. 예외도 발생하지 않습니다. 어떤 생각이 잘못된 것일까 요?내 파일을 zip 보관함에 저장할 수 없습니다.

var savePicker = new Windows.Storage.Pickers.FileSavePicker(); 
savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; 
savePicker.FileTypeChoices.Add("Extended sketchpad", new[] { ".exsk" }); 

Windows.Storage.StorageFile file = await savePicker.PickSaveFileAsync(); 
if (null != file) 
{ 
    try 
    { 
     using (var memoryStream = new MemoryStream()) 
     { 
      using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) 
      { 
       var giffile = archive.CreateEntry("layer.gif"); 
       using (Stream entryStream = giffile.Open()) 
       { 
        await MyInkCanvas.InkPresenter.StrokeContainer.SaveAsync(entryStream.AsOutputStream()); 
       } 
      } 

      using (Windows.Storage.Streams.IRandomAccessStream finalStream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)) 
      { 
       finalStream.Size = 0; 

       memoryStream.Seek(0, SeekOrigin.Begin); 
       memoryStream.CopyTo(finalStream.AsStreamForWrite()); 
      } 
     } 
     //MainPage.NotifyUser("File has been saved!", NotifyType.StatusMessage); 
    } 
    catch (Exception ex) 
    { 
     //MainPage.NotifyUser(ex.Message, NotifyType.ErrorMessage); 
    } 
} 

답변

0

직접 파일에 쓰지 않는 이유는 무엇입니까?

using (var fileStream = await file.OpenStreamForWriteAsync()) 
{ 
    using (var archive = new ZipArchive(fileStream, ZipArchiveMode.Create, true)) 
    { 
     var giffile = archive.CreateEntry("layer.gif"); 

     using (Stream entryStream = giffile.Open()) 
     { 
      await MyInkCanvas.InkPresenter.StrokeContainer.SaveAsync(entryStream.AsOutputStream()); 
     } 
    } 
}