2016-06-02 1 views
0

ZIP 아카이브가 있습니다. 파일/폴더가 많이 있습니다. 나는 그 중 일부를 수정하거나 내용을 대체하고 싶다.Zody 패키지 안에있는 파일 중 하나 Modyfing

내가 사이트에서 몇 가지 smaple 코드를 발견했습니다 http://docs.telerik.com/devtools/silverlight/controls/radziplibrary/features/update-ziparchive.html

을하지만이 작동하지 않는 파일이 업데이트되지 않습니다.

ZipArchiveEntry stencilEntry = archive.GetEntry(SBSX.StencilEntry.FullName);//entries.Where(c => c.Name == "stencil.xml").FirstOrDefault(); 
Stream stencilStream = stencilEntry.Open();//archive.GetEntry(SBSX.StencilEntry.FullName);// SBSX.StencilEntry.Open(); 
using (StreamReader ts = new StreamReader(stencilStream)) 
{ 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.LoadXml(ts.ReadToEnd()); 
    if (xmlDoc.DocumentElement.Name == "Stencil") 
    { 
     stencilStream.Position = 0; 
     Stencil stencil = SupportXML.ReturnObjectFromXML<Stencil>(stencilStream); 
     if (SBSX.Display==DisplayType.IconAndName) 
     { 
      stencil.DefaultControlDisplayStyle = DisplayType.IconAndName.ToString(); 
     } 
     else if (SBSX.Display==DisplayType.IconOnly) 
     { 
      stencil.DefaultControlDisplayStyle = DisplayType.IconOnly.ToString(); 
     } 

     XmlSerializer serializer = new XmlSerializer(typeof(Stencil)); 

     using (MemoryStream stream = new MemoryStream()) 
     { 
      serializer.Serialize(stream, stencil); 
      stream.Seek(0, SeekOrigin.Begin); 

      var sr = new StreamReader(stream); 
      var myStr = sr.ReadToEnd(); 
      stream.Seek(0, SeekOrigin.Begin); 

      stencilStream.Seek(0, SeekOrigin.End); 
      StreamWriter writer = new StreamWriter(stencilStream); 
      writer.Write(myStr); 
     } 
    } 

당신은 해결 방법을 내게 조언을 수 있을까요? 또는 유일한 해결책은 먼저 ZipArchiveEntry를 삭제하고 나중에 새로운 ZipArchiveEntry를 추가하는 것입니다.

답변

1

업데이트 모드에서 zip을 열면 약간의 수정이 필요합니다. 코드가 실행되고 있습니까?

몇 가지 문제가 있습니다. 먼저 StreamWriter를 플러시하지 않습니다. Write 메서드 다음에 명시 적으로 Flush를 호출해야합니다. 그렇지 않으면 데이터가 실제로 스트림에 기록되지 않을 수 있습니다. 이때 개체가 완료 될 때까지 스트림이 닫힐 수 있습니다.

비슷하게 stencilStream에서 Close를 호출하지 않으며, 이것이 외부 StreamReader와 함께 폐기 될 것이지만 실제로는 ZIP 파일의 실제 업데이트를 트리거 할 수 있습니다.

나는이 코드가 기존 파일 내용을 대체하는 대신 추가한다는 사실을 알고 있다고 가정합니다. 연결 XML은별로 유용하지 않습니다.

+0

감사합니다. 플러싱을 추가했으며 현재 작동합니다. 나는 그것을 대체하지 않고 텍스트를 추가한다는 것을 알고 있었지만 추가 만 할 것인지 테스트하고 싶었습니다. – buks

관련 문제