Ziparchive:如何从ziparchive关闭创建的条目

时间:2018-08-07 05:18:37

标签: c# memorystream ziparchive

我已经编写了以下方法,将多个Memorystream绑定到ziparchive。该代码适用于一个流,但是如果我通过迭代添加多个流,则它将在for循环的第二行中显示以下错误。

function onEdit(){
  var tabLists = "Leagues";
  var tabValidation = "2018";
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);

  var activeCell = ss.getActiveCell();

  if(activeCell.getColumn() == 6 && activeCell.getRow() > 1 && ss.getSheetName() == tabValidation){

    activeCell.offset(0, 1).clearContent().clearDataValidations();

    var makes = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();

    var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;

    if(makeIndex != 0){

        var validationRange = datass.getRange(3, makeIndex, datass.getLastRow());
        var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
        activeCell.offset(0, 1).setDataValidation(validationRule);

     }  

  }

}

我的代码,

 System.IO.IOException: 'Entries cannot be created 
 while previously created entries are still open.' 

1 个答案:

答案 0 :(得分:2)

在打开的using上您大概错过了Stream

 using (var zip = new ZipArchive(outputStream, ZipArchiveMode.Create, leaveOpen: false))
 {
    for (int i = 0; i < msList.Count; i++)
    {
        msList[i].Position = 0;
        var createenter = zip.CreateEntry("123"+i+".jpg", 
        CompressionLevel.Optimal);
        using (var s = createenter.Open())
        {
            msList[i].CopyTo(s);
        }
    }
}