C#
C#
Set Entry Filepath (in output Zip) when Zipping
Demonstrates how to set the path for the file entry within the .zip to something different than the path in the filesystem.Chilkat C# Downloads
bool success = false;
// This requires the Chilkat Zip API to have been previously unlocked.
// See Unlock Chilkat Zip for sample code.
Chilkat.Zip zip = new Chilkat.Zip();
success = zip.NewZip("qa_output/zipA.zip");
// When an absolute filepath is passed to AddFile, the path within the .zip
// will be one of two values: (1) just the filename part if saveExtraPath is false,
// or (2) the full absolute path, but made relative, if saveExtraPath is true.
// (For example, "c:/ck2000/appData/UnitTest/qa_data/hamlet.xml" made relative is
// "ck2000/appData/UnitTest/qa_data/hamlet.xml")
bool saveExtraPath = false;
success = zip.AddFile("c:/ck2000/appData/UnitTest/qa_data/hamlet.xml",saveExtraPath);
if (success == false) {
Debug.WriteLine(zip.LastErrorText);
return;
}
// When a relative path is passed to AddFile, then saveExtraPath does not apply.
// For example, assume our current working directory is "c:/ck2000/appData/UnitTest". The following
// call to AddFile creates an entry with the filepath "qa_data/hamlet.xml".
success = zip.AddFile("qa_data/hamlet.xml",saveExtraPath);
if (success == false) {
Debug.WriteLine(zip.LastErrorText);
return;
}
// Examine the entries
Chilkat.ZipEntry entry = new Chilkat.ZipEntry();
int numEntries = zip.NumEntries;
int i = 0;
while (i < numEntries) {
zip.EntryAt(i,entry);
Debug.WriteLine(Convert.ToString(i) + ": " + entry.FileName);
i = i + 1;
}
// The output so far is:
// 0: hamlet.xml
// 1: qa_data/hamlet.xml
// If we write the .zip as-is, then the zip will have two entries
// with the filepaths as shown above.
// This writes "qa_output/zipA.zip"
success = zip.WriteZip();
// Now change the entry filepaths to whatever is desired.
success = zip.EntryOf("hamlet.xml",entry);
if (success == false) {
Debug.WriteLine("entry not found");
return;
}
entry.FileName = "Shakespeare/Claudius1.xml";
success = zip.EntryOf("qa_data/hamlet.xml",entry);
if (success == false) {
Debug.WriteLine("entry not found");
return;
}
entry.FileName = "Shakespeare/Claudius2.xml";
// Change the name of the .zip to be written and write again:
zip.FileName = "qa_output/zipB.zip";
success = zip.WriteZipAndClose();
if (success != true) {
Debug.WriteLine(zip.LastErrorText);
}
else {
Debug.WriteLine("Zip created!");
}
// Examine both zipA.zip and zipB.zip using 7zip (or another tool) to see the differences.