0/5 (23 avis)
Snippet vu 14 875 fois - Téléchargée 36 fois
imports ICSharpCode.SharpZipLib.Zip imports System.io 'On déclare une arraylist qui contiendras tous les fichiers Private ListeInfo As New ArrayList ' La fonction qui va remplir notre arraylist Private Function ListeFichier(ByVal repertoire As DirectoryInfo, ByVal Reset As Boolean) As ArrayList If Reset = True Then ListeInfo.Clear() End If If repertoire.GetDirectories.Length <> 0 Then For Each repertoire2 As DirectoryInfo In repertoire.GetDirectories ListeFichier(repertoire2, False) Next End If For Each fichier As FileInfo In repertoire.GetFiles("*.*") ListeInfo.Add(fichier.FullName) Next Return ListeInfo End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim isError as string Try Dim DI As New DirectoryInfo("D:\Documents\") Dim astrFileNames As ArrayList = ListeFichier(DI, True) Dim strmZipOutputStream As ZipOutputStream strmZipOutputStream = New ZipOutputStream(File.Create("D:\Documents " & now.ToString("dd.MMMM.yyyy hh-mm") & ".zip")) 'Nombre de 1 à 9: 9 plus compressé strmZipOutputStream.SetLevel(9) For Each strFile As String In astrFileNames Dim strmFile As FileStream = File.OpenRead(strFile) Dim abyBuffer(strmFile.Length - 1) As Byte strmFile.Read(abyBuffer, 0, abyBuffer.Length) Dim RelatifstrFile As String RelatifstrFile = strFile.Substring("D:\Documents\".Length) Dim objZipEntry As ZipEntry = New ZipEntry(RelatifstrFile) objZipEntry.DateTime = DateTime.Now objZipEntry.Size = strmFile.Length strmFile.Close() strmZipOutputStream.PutNextEntry(objZipEntry) strmZipOutputStream.Write(abyBuffer, 0, abyBuffer.Length) Next strmZipOutputStream.Finish() strmZipOutputStream.Close() Catch ex as Exception isError = "Erreur :" & VbNewLine & ex.tostring end try if isError is nothing Then isError = "c'est OK, le zip est fait" label1.text = isError End Sub
8 avril 2008 à 10:18
Et merci à tous pour votre aide !
A bientôt je pense ... :D
8 avril 2008 à 10:09
^^
bonne continuation
8 avril 2008 à 10:04
byte[] Buffer = new byte[Convert.ToInt32(FileSize)];
MyFileStream.Read(Buffer, 0, Convert.ToInt32(FileSize-1));
C'est de la prog de base : on déclare un tableau de N case qui débute de 0 à N - 1 (en index). Donc forcement, si je déclare un tableau de FileSize-1 çà va pas le faire et du coup l'archive était corrompue par la taille...
Pour ma défense, je tiens à signaler que c'est un bout de code que j'avais récup du net :D
8 avril 2008 à 09:14
J'ai réussi à m'en sortir, en mettant la propriété de l'update panel UpdateMode="Conditional"
et je le met à jour uniquement lorsque je clique à certains endroit.
Maintenant, du coup je peux modifier la response de mon update panel mais je suis confronter à un autre problème :
le fichier .zip généré est correcte lorsque je l'ouvre depuis la source physique (soit localement soit sur le serveur). Cependant, lorsque je le transmet via le Header de mon response l'archive est corrompue !!! Voici mon code :
private void TransmitFile(string path, string file)
{
Response.Clear();
FileStream MyFileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
long FileSize = MyFileStream.Length;
byte[] Buffer = new byte[Convert.ToInt32(FileSize - 1)];
MyFileStream.Read(Buffer, 0, Convert.ToInt32(FileSize - 1));
MyFileStream.Close();
Response.BufferOutput = true;
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Length", Buffer.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + file);
Response.AddHeader("Content-Transfer-Encoding","binary");
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(Buffer);
Response.Flush();
}
Une idée ? Merci
8 avril 2008 à 01:40
http://blogs.developpeur.org/cyril/archive/2007/05/13/updatepanel-et-pagerequestmanagerparsererrorexception.aspx
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.