7
votes

C # SHARPZIPLIB Ajout de fichier aux archives existantes

J'essaie d'ajouter un fichier à une archive existante à l'aide du code suivant. Lorsqu'il est exécuté, aucune erreur ou des exceptions n'est affichée, mais aucun fichier n'est ajouté à l'archive non plus. Des idées pourquoi? XXX


0 commentaires

7 Réponses :


1
votes

Je pense que votre terminé doit être avant votre Fermer appel.

Mise à jour: Ceci ressemble à un Bug connu . Il est possible que cela a peut-être déjà été corrigé - vous devrez vérifier votre version SharpziPLib pour voir si elle incorpore une solution. Sinon, vous pouvez le contourner en copiant tous les fichiers dans une nouvelle archive, en ajoutant le nouveau fichier, puis en déplaçant la nouvelle archive sur le nom de l'ancienne archive.


0 commentaires

2
votes

de codeProject quelqu'un a utilisé ce code. Seule la différence est proche et terminée par la dernière et la partie d'écriture: xxx

btw: xxx

Ceci est incorrect, la taille est nouvelle. La longueur ailleurs la lecture ne va pas. Vous avez un tableau et vous le faites par exemple 10-1 est de 9 octets de long, de 0 à 8.

mais votre lecture de 0 à 9 ...


2 commentaires

Salut Poweroy, j'ai utilisé ce code exactement et toujours pas d'erreurs, mais aussi pas de fichier :(


J'ai aussi essayé ce zipfile zipfile = nouveau zipfile (archivePath); zipfile.beginupdate (); Entrée zipentertry = nouvelle zipenterry (nom de fichier); zipfile.add (nom de fichier); ZIPFILE.COMMITUPDATE (); Mais alors les chemins sont tous faux. J'ai besoin de définir des chemins relatifs.



15
votes

dans DotNetZip , ajout de fichiers à un zip existant est vraiment simple et fiable.

using (var zip = ZipFile.Read(nameOfExistingZip))
{
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
    zip.AddFiles(listOfFilesToAdd, "directory\\For\\The\\Added\\Files");
    zip.Save();
}


1 commentaires

Je commence à détester Sharpziplib, c'est un niveau trop bas et la lecture de la documentation est confuse.



1
votes
    /// <summary>
    /// 添加压缩文件 p 为客户端传回来的文件/夹列表,用分号隔开,不包括主路径, zipfile压缩包的名称
    /// </summary>
    /// <param name="p"></param>
    /// <param name="zipfile"></param>
    public void AddZipFile(string p, string zipfile)
    {
        if (ServerDir.LastIndexOf(@"\") != ServerDir.Length - 1)
        {
            ServerDir += @"\";
        }
        string[] tmp = p.Split(new char[] { ';' }); //分离文件列表
        if (zipfile != "") //压缩包名称不为空
        {
            string zipfilepath=ServerDir + zipfile;
            if (_ZipOutputStream == null)
            {
                _ZipOutputStream = new ZipOutputStream(File.Create(zipfilepath));
            }
            for (int i = 0; i < tmp.Length; i++)
            {
                if (tmp[i] != "") //分离出来的文件名不为空
                {
                    this.AddZipEntry(tmp[i], _ZipOutputStream, out _ZipOutputStream); //向压缩文件流加入内容
                }
            }
        }
    }
    private static ZipOutputStream _ZipOutputStream;
    public void Close()
    {
        _ZipOutputStream.Finish();
        _ZipOutputStream.Close();
    }

0 commentaires

-1
votes

J'ai trouvé une solution simple la maintenant à zipfile et zipientry uniquement xxx


0 commentaires

0
votes

Il y a un dossier ZippedFolder dans le répertoire racine du site, à l'intérieur, nous avons une archive myzipfiles .

Il y a un dossier avec nom SiteImages qui consiste en tous les fichiers image. Ce qui suit est le code pour zip les images xxx

si nous avons des formats de fichier différents et que nous voulons que vos fichiers soient enregistrés dans des dossiers respectifs, vous pouvez spécifier le code comme suit. xxx

maintenant l'archive contient deux dossiers images -----> img1.jpg, img2, .jpg et un autre dossier Fichiers -> Customer.PDF, Sample.Doc


0 commentaires

0
votes

La classe zipOutputStream ne met pas à jour les fichiers ZIP existants. Utilisez la classe zipfile .


0 commentaires