Problème de décompression de fichier zip- les fichiers restent ouverts

mohamed_bn Messages postés 47 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 10 septembre 2010 - 5 mars 2005 à 10:00
belfdil_radouane Messages postés 1 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 2 novembre 2009 - 2 nov. 2009 à 15:26
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 pouvez m'aider à resoudre ce problème n'hésiter à me répondre .
si vous connaisser une autre source qui traite la décompression d'un répertoire svp me la donner

1 réponse

belfdil_radouane Messages postés 1 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 2 novembre 2009
2 nov. 2009 à 15:26
Bonjour,
Vous avez un petit oublie car la fermiture du fichier se fais a chaque itération, du coup juste après la boucle :
while ((count = zis.Read(buffer,0,4096)) > 0) //4096
{
fos.Write(buffer,0,count);
}
on doit avoir :
fos.Close()

après tout marche nickel :)
0
Rejoignez-nous