Wir haben Code zum Hochladen einer ZIP-Datei. Wenn die ZIP-Datei zu Beginn des Prozesses den Ordner __MACOSX in der ZIP-Datei enthält, werden diese Ordner/Dateien aus der ZIP-Datei entfernt und die Dateibytes weitergegeben.< /p>
Das Problem, das wir haben, ist, dass wir weiter unten in der Kette, wenn wir ein neues ZipArchive mit fileBytes erstellen, die Fehlermeldung erhalten:
Number of entries expected in End Of Central Directory does not correspond to number of entries in Central Directory.
Dies geschieht nur, wenn die Zip-Datei keine zu entfernenden __MAXOSX-Ordner enthält. Das Auskommentieren des folgenden Codes verhindert, dass dieser Fehler jemals auftritt.
// Strip MacOSX folder if zip
var fileBytes = uploadController.FileBytes;
if (uploadController.FileName.EndsWith(".zip", StringComparison.CurrentCultureIgnoreCase))
{
try
{
using (var data = new MemoryStream(fileBytes))
{
var changed = false;
using (var archive = new ZipArchive(data, ZipArchiveMode.Update))
{
while (true)
{
var osx = archive.Entries.FirstOrDefault(
c => c.FullName.StartsWith("__MACOSX/", StringComparison.CurrentCultureIgnoreCase)
);
if (osx == null) break;
osx.Delete();
changed = true;
}
}
// Archive is updated once disposed
if (changed)
{
fileBytes = data.ToArray();
}
}
}
catch (Exception e)
{
return new ObjectReturnMethodResult("Uploaded zip appears to be invalid." + e.Message);
}
}
Wenn der obige Code auf einer ZIP-Datei ausgeführt wird, die __MACOSX nicht enthält, warum kann es zu diesem Fehler kommen?
Die im Ende des zentralen Verzeichnisses erwartete Anzahl der Einträge entspricht nicht der Anzahl der Einträge im zentr ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post