我有以下方法在下载后解压缩文件。但它以错误结束
System.ArgumentException路径为空 System.IO.Directory.CreateDirectory System.String文件中的路径0x00000 在ionic.zip.zipentry.internalExtract system.string basedir中未知 system.io.stream outstream system.string密码0x00000 in filname 未知的。
该zip文件没有密码,可以打开,例如用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();
}
}
}
答案 0 :(得分:1)
我通过使用googleing找到的名为ZipStorer
的类解决了我的问题。我在这里找到了它:zipstorer.codeplex.com它很小,很容易使用!!
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);
}