Par exemple, si j'ai un dossier nommé 2016, et dans ce dossier sont les dossiers Jan-Dec et d'autres fichiers, y at-il un moyen de compresser ces dossiers ensemble en 2016.zip? Tout ce que j'ai essayé zips ensemble tous les fichiers dans le dossier, mais je veux zipper ensemble juste les dossiers et aucun autre fichier dans le dossier.Est-il possible de compresser des dossiers ensemble en C#?
Fondamentalement, ce serait 2016.zip avec Jan-Dec dossiers dans le 2016.zip avec chacun des dossiers ayant leurs fichiers respectifs dans eux, pas des dossiers vides dans le zip.
Le code suivant récupère les fichiers commençant par 00, mais pas les dossiers.
// Where the files are located
string strStartPath = txtTargetFolder.Text;
// Where the zip file will be placed
string strZipPath = @"C:\Users\smelmo\Desktop\testFinish\" + strFileNameRoot + "_" + txtDateRange1.Text.Replace(@"/", "_") + "_" + txtDateRange2.Text.Replace(@"/", "_") + ".zip";
if(File.Exists(strZipPath))
{
File.Delete(strZipPath);
}
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
foreach (FileInfo file in new DirectoryInfo(strStartPath).GetFiles())
{
if (file.Name.StartsWith("00"))
{
var entry = archive.CreateEntryFromFile(Path.Combine(file.Directory.ToString(), file.Name), file.Name);
}
}
}
J'ai également essayé d'utiliser typeof()
mais il ne saisit pas les dossiers, ou quoi que ce soit.
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
foreach (FileInfo file in new DirectoryInfo(strStartPath).GetFiles())
{
Type t = file.GetType();
if (t.Equals(typeof(Directory)))
{
var entry = archive.CreateEntryFromFile(Path.Combine(file.Directory.ToString(), file.Name), file.Name);
}
}
EDIT: ajouté des détails pour plus de clarté
Juste pour clarifier, vous voulez un zip de dossiers vides, non? –
@ CodyG.No, les dossiers Jan-Dec contiennent des fichiers. Je voudrais zipper les dossiers Jan-Dec ensemble. Donc, l'ouverture de 2016.zip aurait des dossiers Jan-Dec et ensuite ces dossiers ayant leurs fichiers respectifs. – smelmo
Pourquoi n'essayez-vous pas 'DirectoryInfo (strStartPath) .GetDirectories'? '.GetFiles()' ne retournera pas les répertoires ... –