Die im Ende des zentralen Verzeichnisses erwartete Anzahl der Einträge entspricht nicht der Anzahl der Einträge im zentr
Posted: 22 Dec 2024, 10:01
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?
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?