C# ZipArchiv Bug?

OP #3228594
Lesenswert?
• ▲
▼
Hallo,

ich versuche mit einer StoreApp ein ZipArchiv zu erstellen. Das ist auch 
überhaupt kein Problem, nur wenn ich im Speichern Dialog eine vorhandene 
ZipDatei auswähle, wird diese ab und zu nicht korrekt abgespeichert. 
Teile der Datei sind dann beschädigt. Aber ich Öffne die Datei nicht zum 
Updaten, sondern diese wird durch eine komplett neue ersetzt, zumindest 
will ich das.
1
FileSavePicker savePicker = new FileSavePicker();
2
            savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
3
            // Dateiendung festlegen
4
            savePicker.FileTypeChoices.Add("Plain Text", new List<string>() { ".zip" });
5
            // Standartdateiname festlegen
6
            savePicker.SuggestedFileName = "export";
7
            StorageFile file = await savePicker.PickSaveFileAsync();
8
            
9
            using (ZipArchive zz = new ZipArchive(await file.OpenStreamForWriteAsync(), ZipArchiveMode.Create,false))
10
            {
11
               
12
                //Einträge hinzufügen, Code irrelevant, funktioniert
13

14

15
            }

Hab ich da was falsch gemacht, oder gibt es da einen Bug oder ähnliches?
Wie gesagt, ich kann 1000 mal die Datei so speichern, und sie ist in 
Ordnung. Aber überschreibe ich eine, kommt ab und zu ein Fehler vor...
Gast #3228695
Lesenswert?
• ▲
▼
Meine erste Vermutung wäre, dass der neue Datensatz kleiner ist, als der 
alte. Beim Schreiben in den Stream der alten Datei, hat man dann den 
Rest der alten Datei auch in der neuen Datei, was dann die Fehler beim 
Öffnen verursachen könnte.
Daher in einen neuen Stream schreiben oder den alten mit 
System.IO.Stream.SetLength() auf die richtige Grösse stutzen (wenn man 
die neue Länge hat; eventuell von der Position ablesbar) oder 
SetLength(0) schon vor dem Speichern aufrufen oder oder oder... :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren