{
  "WorkItem": {
    "AffectedComponent": {
      "Name": "",
      "DisplayName": ""
    },
    "ClosedComment": "",
    "ClosedDate": null,
    "CommentCount": 0,
    "Custom": null,
    "Description": "I'd like to wrap all the items that pertain only to the Save() action that are currently exposed as properties of the ZipFile type, into a new type, Ionic.Zip.SaveOptions.  Rather than setting these things on the ZipFile class itself, applications will set them in a SaveOptions instance that they pass to the Save() method call. \n \nProperties that should be included in a SaveOptions type: \n- TimeFormat (in place of EmitTimesIn{Windows,Unix}FormatWhenSaving)\n- UseZip64WhenSaving, \n- MaxOutputSegmentSize\n- SaveProgress\n- Overwrite\n- IoBufferSize\nThe names of these things would be changed to eliminate the redundancy.  \"WhenSaving\" is no longer needed when they are properties on a type called SaveOptions. \n \nAll these options will be set as a unit, in one place. Any unset value will default.  \n \nSimilarly: ReadOptions: \n  - Encoding\n  - StatusMessageWriter\n  - ReadProgress\n \nand, SaveResults: \n - UsedZip64\n - Segments \n - BytesWritten\n \n \nSample usage: \n \n// save to a named file (all default options): \n SaveResults r = zip.Save(filename);  // same as v1.9\n \n// save to a named file, use Unicode as necessary: \n SaveResults r = zip.Save(filename, new SaveOptions{ ProvisionalAlternateEncoding = Encoding.UTF8} );  \n \n// save to a named file, with ZIP64 enabled, Encoding = UTF8: \n var options = new SaveOptions{ UseZip64 = true, EmitTimesInWindowsFormat = false, ProvisionalAlternateEncoding = Encoding.UTF8};\n SaveResults r = zip.Save(filename, options);\n \n// save to a named file, specify a save progress event: \n  EventHandler<SaveProgressEventArgs> sp = (sender,e) => { if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) Console.WriteLine(e.CurrentEntry.FileName); } ; \n  SaveResults r = zip.Save(filename, new SaveOptions{ SaveProgress = sp }); \n \n \n \nThis would parallel nicely with the SaveSelfExtractor approach.  All the SFX save options are specified in a separate class.   Might need to converge or reconcile the SFX options with the regular save options. In fact, the SFX options are additive, so they might logically be modelled as a subset of the regular Save options, a property on the ZipSaveOptions type.  \n \n \n-----\n \nAlso, do the same thing with the ReadOptions.  When reading a zip file, there are 3 options: encoding, statuswriter, and event handler.   It'd be nice to have these in a single class.  \n \n----\n \nThe .NET 4.0 \"optional parameters\" capability would be nice, in lieu of this, but not everyone will use .NET 4.0.    \n \nsee also, workitem 9030  http://dotnetzip.codeplex.com/WorkItem/View.aspx?WorkItemId=9030 ,  which deals with SaveResults .",
    "LastUpdatedDate": "2013-02-21T18:43:53.33-08:00",
    "PlannedForRelease": "v2.0 - planning",
    "ReleaseVisibleToPublic": true,
    "Priority": {
      "Name": "Low",
      "Severity": 50,
      "Id": 1
    },
    "ProjectName": "DotNetZip",
    "ReportedDate": "2009-10-22T11:56:36.297-07:00",
    "Status": {
      "Name": "Proposed",
      "Id": 1
    },
    "ReasonClosed": {
      "Name": "Unassigned"
    },
    "Summary": "Refactor to collect ZipFile save options into one class. Likewise with Read Options.",
    "Type": {
      "Name": "Issue",
      "Id": 3
    },
    "VoteCount": 3,
    "Id": 9031
  },
  "FileAttachments": [],
  "Comments": [
    {
      "Message": "You can see this implemented in the v1.9.5 preview release.\r\n",
      "PostedDate": "2010-01-22T17:05:25.263-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-01-22T23:40:24.58-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-01-22T23:41:07.24-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-01-22T23:43:41.09-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-02-26T12:53:13.473-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-02-26T13:08:14.06-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-02-26T13:09:08.33-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-02-26T14:06:59.283-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-02-26T14:08:05.43-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2010-03-29T19:01:47.367-07:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2011-06-13T20:24:20.297-07:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2013-02-21T18:43:53.33-08:00",
      "Id": -2147483648
    }
  ]
}