Hallo zusammen,
ich frage mich, ob es einen anderen Weg gibt, eine vorhandene Datei in einer Zip-Datei zu editieren ohne das Zip-Paket zwischen zu speichern.
Konkreter möchte ich eine Zahl in einer Textdatei ändern. Diese Textdatei ist neben anderen in einem Zip verpackt.
Oder läüft das nur über "Entpacken (und speichern) - Datei editieren - Packen (und löschen)"?
Für das Zip-Handling verwende ich derzeit SharpZipLib.
Danke für die Antworten.
Gruß
Carlo
"Palabras que no coinciden con hechos no valen nada."
Hi,
das sollte möglich sein, denn:
a) Es ist möglich eine (von vielen Dateien) aus dem Stream zu laden
(siehe https://stackoverflow.com/questions/2971079/sharpziplib-extracting-single-file)
b) Es ist möglich ein ZipFile zu updaten:
(siehe https://github.com/icsharpcode/SharpZipLib/wiki/Updating)
Wäre nett wenn du über das Ergebnis berichtest.
LG
Du kannst keine Datei in einem Zip editieren. Die Datei musst Du einzeln raus ziehen.
Danach kannst die Datei isoliert überschreiben.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich hab von SharpLibZip auf DotNetZip umgesattelt, irgendwie gefiel mir die lib besser. Mit folgendem Code gelingt mir mein Vorhaben (ich weiß, bei gleichnamigen files wird derzeit nur das erste geändert)
/// <summary>
/// Change Content of a single
/// </summary>
/// <param name="myPath">Path to dedicated zip file</param>
/// <param name="myFile">File to be modified</param>
public void modifyZippedFile(string myPath, string myFile)
{
string fileContent;
string targetFile = "";
using (ZipFile zip = ZipFile.Read(myPath))
{
foreach (ZipEntry entry in zip.Entries)
if (entry.FileName.Contains(myFile))
targetFile = entry.FileName;
ZipEntry e = zip[targetFile];
using (StreamReader sr = new StreamReader(e.OpenReader(), Encoding.Default, true))
{
fileContent = sr.ReadToEnd();
fileContent = modifyContent(fileContent);
zip.RemoveEntry(targetFile);
zip.AddEntry(targetFile, fileContent);
zip.Save();
}
}
}
Gruß
Carlo
"Palabras que no coinciden con hechos no valen nada."