在使用.NET c#进行压缩后使用Windowsexplorer打开.zip

时间:2018-01-11 12:08:00

标签: c# .net ftp zip windows-explorer

嘿,我在我的RAM中用C#压缩文件并将它们上传到Ftp-Server时有一点问题。这个工作非常好。

destinyPath =“product / test / zipped.zip”; sourcePath = @“C:\ devtest ...”

    private String UploadToFtp(String destinyPath, String sourcePath, ref FtpClient client)
    {
        String error = "success";
        try
        {
            // Stream im Arbeitsspeicher erstellen
            using (Stream memoryStream = new MemoryStream())

            // Ziparchive anhand des verweißes auf den memoryStream erstellen
            using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
            {
                // Dateien im gezippten Ordner bestimmen
                foreach (string path in Directory.EnumerateFiles(sourcePath))
                {
                    ZipArchiveEntry entry;
                    if (path.Length > 248)
                    {
                        // Bestimmte Dateien ins Ziparchive erstellen mit langen Pfad
                        entry = archive.CreateEntry(ZlpPathHelper.GetFileNameFromFilePath(path));
                    }
                    else
                    {
                        // Bestimmte Dateien ins Ziparchive erstellen mit kurzem Pfad
                        entry = archive.CreateEntry(Delimon.Win32.IO.Path.GetFileName(path));
                    }

                    // Original Daten (entryStream) in Ziparchivedateien (fileStream) schreiben
                    using (Stream entryStream = entry.Open())

                    using (Stream fileStream = Delimon.Win32.IO.File.OpenRead(path))
                    {
                        fileStream.CopyTo(entryStream);
                    }
                }
                //memoryStream curser auf anfang setzen
            memoryStream.Seek(0, SeekOrigin.Begin);

                //Stream auf den FtpServer laden
            client.RetryAttempts = 3;
                client.Upload(memoryStream, destinyPath);
            }
        }
        catch (Exception ex)
        {
            error = ex.ToString();
        }
        return error;
    }

但现在我的问题。如果我在下载后尝试使用doubleclick打开它们,我总是从Windows获得相同的摘要:“无法打开目录.Zip目录'C:*'无效。”但是,如果我右键单击7-zip-> open-> *,7-zip-> open->#或7-zip-> open->#:e它可以工作。

属性:打开方式是Windows-Explorer。

是的,我试图一次又一次地下载.zip。我用Google搜索,发现类似“无法找到Fileending”,但没有解决方法。

1 个答案:

答案 0 :(得分:-1)

我发现了我的错误。它与ZlpPathHelper或Delimon程序集无关。

现在这是Code巫婆的工作。我把使用“} {”放到错误的地方。 Ftp上传不应该在archive-Stream的使用块中。

导致在完全创建存档之前上载.zip存档的结果。 =>所有文件都在存档中,但如果我尝试打开它,则会出错。

    private String UploadToFtp(String destinyPath, String sourcePath, ref FtpClient client)
    {
        String error = "success";
        try
        {
            // Stream im Arbeitsspeicher erstellen
            using (Stream memoryStream = new MemoryStream())
            {
                // Ziparchive anhand des verweißes auf den memoryStream erstellen
                using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
                {
                    // Dateien im gezippten Ordner bestimmen
                    foreach (string path in Directory.EnumerateFiles(sourcePath))
                    {
                        ZipArchiveEntry entry;
                        if (path.Length > 248)
                        {
                            // Bestimmte Dateien ins Ziparchive erstellen mit langen Pfad
                            entry = archive.CreateEntry(ZlpPathHelper.GetFileNameFromFilePath(path));
                        }
                        else
                        {
                            // Bestimmte Dateien ins Ziparchive erstellen mit kurzem Pfad
                            entry = archive.CreateEntry(Path.GetFileName(path));
                        }

                        // Original Daten (entryStream) in Ziparchivedateien (fileStream) schreiben
                        using (Stream entryStream = entry.Open())
                        {
                            using (Stream fileStream = Delimon.Win32.IO.File.OpenRead(path))
                            {
                                fileStream.CopyTo(entryStream);
                            }
                        }
                    }
                }
                //memoryStream curser auf anfang setzen
                memoryStream.Seek(0, SeekOrigin.Begin);

                //Stream auf den FtpServer laden
                client.RetryAttempts = 3;
                client.Upload(memoryStream, destinyPath);
            }
        }
        catch (Exception ex)
        {
            error = ex.ToString();
        }
        return error;
    }