2010-04-20 4 views
2

où DotNetZip obtenir son répertoire racine pour l'enregistrement. Tous les exemples de sauvegarde ne montrent pas le répertoire.Quel est le répertoire racine OU comment puis-je définir le répertoire dans DotNetZip

Mon but est de recurfer un dossier et des sous-dossiers. Dans chaque dossier, je veux compresser tous les fichiers dans un zip et supprimer les fichiers source.

private void CopyFolder(string srcPath, string dstPath) 
    { 
     if (!Directory.Exists(dstPath)) 
      Directory.CreateDirectory(dstPath); 
     string[] files = Directory.GetFiles(srcPath); 
     string msg; 
     string zipFileName; 
     using (ZipFile z = new ZipFile(Path.Combine(srcPath,String.Format("Archive{0:yyyyMMdd}.zip", DateTime.Now)))) 
     { 
      z.ReadProgress += new EventHandler<ReadProgressEventArgs>(z_ReadProgress); 
      foreach (string file in files) 
      { 
       FileInfo fi = new FileInfo(file); 
       AddLog(String.Format("Adding {0}", file)); 
       z.AddFile(file); 

      } 
      //z.Save(Path.Combine(srcPath, String.Format("Archive{0:yyyyMMdd}.zip", DateTime.Now))); 
      z.Save(); 
      if (deleteSource) 
      { 
       foreach (string file in files) 
       { 
        File.Delete(file); 
       } 
      } 

      zipFileName = z.Name; 
     } 
     if (!compressOnly) 
      File.Copy(Path.Combine(srcPath,zipFileName), Path.Combine(dstPath, Path.GetFileName(zipFileName))); 
     string[] folders = Directory.GetDirectories(sourcePath); 
     foreach (string folder in folders) 
     { 
      string name = Path.GetFileName(folder); 
      string dest = Path.Combine(dstPath, name); 
      Console.WriteLine(ln); 
      log.Add(ln); 
      msg = String.Format("{3}{4}Start Copy: {0}{4}Directory: {1}{4}To: {2}", DateTime.Now.ToString("G"), name, dest, ln, Environment.NewLine); 
      AddLog(msg); 
      if (recurseFolders) 
       CopyFolder(folder, dest); 
      msg = String.Format("Copied Directory: {0}{4}To: {1}\nAt: {2}{3}", folder, dest, DateTime.Now.ToString("G"), Environment.NewLine); 
      AddLog(msg); 
     } 
    } 

Répondre

0

C'est un chemin relatif au current working directory, ou un chemin absolu. C'est essentiellement la procédure standard pour les chemins.

EDIT: Le chemin enregistré n'a rien à voir avec les répertoires du zip. Soit:

using(ZipFile f = new ZipFile("zip_dir/foo.zip")) 
{ 
     f.AddFile("foo.txt"); 
     f.Save(); 
} 

ou

using(ZipFile f = new ZipFile()) 
{ 
     f.AddFile("foo.txt"); 
     f.Save("zip_dir/foo.zip"); 
} 

ne la bonne chose, à savoir créer un fichier zip à ./zip_dir/foo.zip contenant un seul fichier foo.txt. Bien sûr, vous pouvez créer des sous-répertoires dans le zip, mais c'est un problème distinct.

+0

Et comment cela est-il réglé? Avec un meathod statique d'une classe dans System.File.IO? –

+1

Vous pouvez utiliser Directory.SetCurrentDirectory si vous le souhaitez et disposer des autorisations requises (http://msdn.microsoft.com/en-us/library/system.io.directory.setcurrentdirectory.aspx). Ce n'est pas obligatoire, car vous pouvez toujours spécifier le chemin d'une autre manière. –

0

Le constructeur que vous utilisez ZipFile z = new ZipFile(...) prend un chemin qui est l'emplacement où le fichier zip est enregistré.

+0

c'est vrai, et j'ai implémenté cela, mais cela crée des sous-répertoires dans le zip et je ne le veux pas. –

2

Un peu tard et peut-être que nous parlons de deux versions différentes, mais cela pourrait quand même aider les autres.

Vous pouvez spécifier où les fichiers sont stockés dans les archives en utilisant le second argument de AddFile. @"\" signifie que tous les fichiers seront stockés à la racine.

z.AddFile(file,@"\"); 
Questions connexes