1

我有以下方法在下载后解压缩文件。但它以错误结束

System.ArgumentException 路径为空 System.IO.Directory.CreateDirectory System.String path 0x00000 in ionic.zip.zipentry.internalExtract system.string basedir system.io.stream outstream system.string password 0x00000 in 文件名未知。

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();
        }
    }
}
4

1 回答 1

1

我通过使用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);
}
于 2013-10-13T16:56:50.173 回答