Reputation: 221
I have the following method to unzip a file after download. But it ends with an error
System.ArgumentException Path is empty at System.IO.Directory.CreateDirectory System.String path 0x00000 in file unknown at ionic.zip.zipentry.internalExtract system.string basedir system.io.stream outstream system.string password 0x00000 in filname unknown.
The zip file does not have a password and can be opened e.g. with android zip
public void ExtractBilderZip()
{
string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string unzipziel = Path.Combine(documentsPath, "Bilder");
// if Bilder does not exist create subdirectory
if (Directory.Exists(unzipziel)==false)
{
var directoryname = Path.Combine(documentsPath, "Bilder");
Directory.CreateDirectory(directoryname);
}
//////////////////////////////////////////////////////
string zipToUnpack = localPathB; //localPathB ist the zipFile name including path
// I tried with and wihout the following 2 lines which makes no diffence
zipToUnpack = zipToUnpack.Replace('/', Path.DirectorySeparatorChar);
unzipziel = unzipziel.Replace('/', Path.DirectorySeparatorChar);
try
{
ZipFile zip1 = ZipFile.Read(zipToUnpack);
zip1.ExtractAll(unzipziel,ExtractExistingFileAction.OverwriteSilently);
}
catch (System.Exception ex1)
{
//System.Console.Error.WriteLine("exception: " + ex1);
for (int i = 0; i < 10; i++)
{
Toast.MakeText(this, "exception: " + ex1, ToastLength.Long).Show();
}
}
}
Upvotes: 2
Views: 1896
Reputation: 221
I solved my problem by use of a Class called ZipStorer
which I found by googleing. I found it here: zipstorer.codeplex.com It is tiny and very easy to use!!
FileInfo fi = new FileInfo(zipToUnpack);
FileStream inFile = fi.OpenRead();
// Get original file extension,
// for example "doc" from report.doc.cmp.
string curFile = fi.FullName;
string origName = unzipziel;
try
{
// Opens existing zip file
ZipStorer zip = ZipStorer.Open(localPathB, FileAccess.Read);
// Read all directory contents
List<ZipStorer.ZipFileEntry> dir = zip.ReadCentralDir();
// Extract all files in target directory
string path;
bool result;
foreach (ZipStorer.ZipFileEntry entry in dir)
{
path = Path.Combine(unzipziel, Path.GetFileName(entry.FilenameInZip));
result = zip.ExtractFile(entry, path);
RunOnUiThread(() =>
{
Button buttonUZ = FindViewById<Button>(Resource.Id.btnUnzip);
buttonUZ.Text = "Entpacke: " + entry.FilenameInZip;
});
}
zip.Close();
File.Delete(@localPathB);
}
catch (Exception ex1)
{
var errorActivity = new Intent(this, typeof(ErrorActivity));
errorActivity.PutExtra("ERROR", ex1.ToString());
StartActivity(errorActivity);
}
Upvotes: 1