Problème dans la décompression d'un répertoire compressé

mohamed_bn Messages postés 47 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 10 septembre 2010 - 5 mars 2005 à 09:26
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 - 6 nov. 2007 à 00:11
med belhassen

j'ai utilisé ce petit programme que j'ai trouvé sur ce site dans mon application web. il permet de décompresser les fichiers zips.
mais le problème c'est que les fichiers décompressés restent inaccessibles en écriture. c'est à dire que je ne peut pas les éffacer jusquà sortir du formulaire web et attendre quelques minutes. j'ai utilisé ce programme dans mon application web qui permet à un client d'uploder un fichier zip puis elle la décompresse sur le serveur. et le client par la suite peut normalement éffacer les fichiers ou les déplacer. mais ce petit programme bloque mes fichiers extraites du zip. (apparament qu'il ne les fermes pas automatiquement malgré qu'on a fermé dans le code les flus ouverts de fichiers.

voici le corps de ce programme:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using ICSharpCode.SharpZipLib.Zip;
using System.IO;


namespace décompressionzipcs
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}


#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);


}
#endregion

void ExtractArchive(string zipFilename,string extractDir)
{
ZipInputStream zis = null;
FileStream fos = null;


try
{
zis = new ZipInputStream(new FileStream(zipFilename,FileMode.Open,FileAccess.Read));
ZipEntry ze;


// on dezippe tout dans un rep du nom du zip, pas en bordel
Directory.CreateDirectory(extractDir);


while ((ze = zis.GetNextEntry()) != null)
{
if (ze.IsDirectory)
{
Directory.CreateDirectory(extractDir+"\"+ze.Name);
}
else
{
if (!Directory.Exists(extractDir+"\"+Path.GetDirectoryName(ze.Name)))
{
Directory.CreateDirectory(extractDir+"\"+Path.GetDirectoryName(ze.Name));
}


fos = new FileStream(extractDir+"\"+ze.Name,FileMode.Create,FileAccess.Write);
int count;
byte[] buffer= new byte[4096];


while ((count = zis.Read(buffer,0,4096)) > 0) //4096
{
fos.Write(buffer,0,count);
}
}

}

}
finally
{//zis.Close();
//fos.Close();
if (zis != null) zis.Close();
if (fos != null ) fos.Close();
}







}


private void Button1_Click(object sender, System.EventArgs e)
{
ExtractArchive("d:\\1.zip","d:\\ghn\");
Response.Write("archive is decompressed");
}

}
}

si vous connaissez une autre source qui permet de décompresser un répertoire n'hésiter pas à me le signaler. de meme si vous me proposer une autre solution

1 réponse

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
6 nov. 2007 à 00:11
Une bonne méthode lorsque l'on travaille avec des streams est d'utiliser le mot clé "Using".

using (FileStream fs = new FileStream)
{
}

L'avantage est non seulement en terme de performance et de propreté, mais aussi de lisibilité dans le code. Par ailleurs tu ne traites pas l'exception lié au fait que tu ne puisse pas créer de répertoire.

::|The S@ib|::
MVP C#.NET
0
Rejoignez-nous