[C#] Création de mon premier projet.

ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012 - 14 févr. 2011 à 13:57
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012 - 16 févr. 2011 à 14:42
Bonjour,

J'aimerai créer un outils (graphique) assez simple. Cet outil doit savoir explorer et modifier une sorte de .zip (C'est un .xap, un format pour Windows Phone 7 qui est très très proche du .zip)

Il n'y a que deux types de ressource à identifier et à modifier/changer. .png et .xml.

J'ai commencé à le codé en C#

J'ai terminé (quasiment la partie) graphique du soft. Tous les boutons n'appellent pas encore toutes les fonctions car je bloque dès le début. (Je n'arrive pas à entrer dans les ressources du .xap (.zip) en fait)

En effet, le principe c'est de modifier deux ressources dans le .xap (png et xml) mais aussi d'ajouter un provxml.

Je crois après des recherches avoir compris que pour explorer un .zip je dois avoir ICSharpCode.SharpZipLib.dll.

Je sais pas du tout comment faire. C'est mon premier réel projet. J'espère que vous allez pouvoir m'aider dans cette première expérience! Jusqu'à aujourd'hui je n'avais fais que des programmes en console de type cours comme des jeux du chaud ou froid. Je suis donc réellement novice. Mais j'ai ce projet à coeur. J'espère que vous allez pouvoir m'aider!

Merci pour tout !

46 réponses

ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
14 févr. 2011 à 13:59
Mon projet ressemble à ça pour le moment.

http://www.hostingpics.net/viewer.php?id=783079xapeditor.png
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
14 févr. 2011 à 15:01
Hello,
Tu peux renommer ton xap en zip et ainsi, tu peux utiliser la lib SharpZipLib
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
14 févr. 2011 à 15:42
J'ai justement essayé mais en fait c'est que je n'arrive pas à intégrer SharpzipLib dans mon cod source, je n'ai vu ça nul part dans les bouquins que j'ai achetés...

Voilà le code source pour choisir le .xap:

private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                System.IO.StreamReader(openFileDialog1.FileName);
                MessageBox.Show(sr.ReadToEnd());
                sr.Close();
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
14 févr. 2011 à 15:49
Il faut que tu l'ajoutes en tant que référence dans ton projet

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
14 févr. 2011 à 16:02
C'est à dire que je dois, dans mon code source appelé la dll ? (de quelle manière dans ce cas?)(en supposant qu'elle sera dans le même fichier que le .exe.)

Sur un site de MS, j'ai trouvé des trucs pour lire des .zip.

using System;
using Ionic.Zip;

namespace Ionic.Zip.Examples
{
    public class ReadZip
    {
        private static void Usage()
        {
            Console.WriteLine("usage:\n  ReadZip2 <zipfile> ");
            Environment.Exit(1);
        }


        public static void Main(String[] args)
        {

            if (args.Length != 2) Usage();
            if (!System.IO.File.Exists(args[0]))
            {
                Console.WriteLine("That zip file does not exist!\n");
                Usage();
            }

            try
            {
                // Specifying Console.Out here causes diagnostic msgs to be sent to the Console
                // In a WinForms or WPF or Web app, you could specify nothing, or an alternate
                // TextWriter to capture diagnostic messages. 

                using (ZipFile zip = ZipFile.Read(args[0], System.Console.Out))
                {
                    // This call to ExtractAll() assumes:
                    //   - none of the entries are password-protected.
                    //   - want to extract all entries to current working directory
                    //   - none of the files in the zip already exist in the directory;
                    //     if they do, the method will throw.
                    zip.ExtractAll(args[1]);
                }
            }
            catch (System.Exception ex1)
            {
                System.Console.Error.WriteLine("exception: " + ex1);
            }

        }
    }
}


j'ai essayé de l'intégrer dans mon code, je n'ai eu que des erreurs
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
14 févr. 2011 à 16:22
Au niveau de ton projet, tu peux faire un clic droit > Ajouter une référence.
Quelles sont les erreurs que tu obtiens avec le code que tu postes?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
14 févr. 2011 à 16:46
 private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() = = System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                System.IO.StreamReader(openFileDialog1.FileName);
                MessageBox.Show(sr.ReadToEnd());
                sr.Close();
               public class ReadZip
    {
        private static void Usage()
        {
            Console.WriteLine("usage:\n  ReadZip2 <zipfile> ");
            Environment.Exit(1);
        }


        public static void Main(String[] args)
        {

            if (args.Length != 2) Usage();
            if (!System.IO.File.Exists(args[0]))
            {
                Console.WriteLine("That zip file does not exist!\n");
                Usage();
            }

            try
            {
                // Specifying Console.Out here causes diagnostic msgs to be sent to the Console
                // In a WinForms or WPF or Web app, you could specify nothing, or an alternate
                // TextWriter to capture diagnostic messages. 

                using (ZipFile zip = ZipFile.Read(args[0], System.Console.Out))
                {
                    // This call to ExtractAll() assumes:
                    //   - none of the entries are password-protected.
                    //   - want to extract all entries to current working directory
                    //   - none of the files in the zip already exist in the directory;
                    //     if they do, the method will throw.
                    zip.ExtractAll(args[1]);
                }
            }
            catch (System.Exception ex1)
            {
                System.Console.Error.WriteLine("exception: " + ex1);
            }

        }
    }
}
            }

        }


J'obtiens "Definition de type ou d'espace de noms, ou de fichier attendue"

J'ai ajouté dans les référence " ICSharpCode.SharpZipLib.dll "

 private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog()  == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                System.IO.StreamReader(openFileDialog1.FileName);
                MessageBox.Show(sr.ReadToEnd());
                sr.Close();


lorsque je suis là, je dois faire appel à cette référence? Si oui, comment ??

Merci pour ton aide !
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
14 févr. 2011 à 16:49
Tu peux regarder ici ou bien

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
14 févr. 2011 à 17:25
Très bien, merci, je vais essayer de regarder ça ce soir en rentrant, merci pour tout buno
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
15 févr. 2011 à 14:01
Bonjour, j'ai donc essayé de m'en sortir avec le lien pour unzip. (Je veux travailler sur les .xap mais pour l'instant je test que sur des .zip)

J'obtiens des erreurs. je crois que je copie mal le code.

 private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                System.IO.StreamReader(openFileDialog1.FileName);
                MessageBox.Show(sr.ReadToEnd());
                sr.Close();FileStream fileStreamIn = new FileStream
(SrcFile, FileMode.Open, FileAccess.Read);
    ZipInputStream zipInStream = new ZipInputStream(fileStreamIn);
    ZipEntry entry = zipInStream.GetNextEntry();
    FileStream fileStreamOut = new FileStream
(DstFile + @"" + entry.Name, FileMode.Create, FileAccess.Write);
    int size;
    byte[] buffer = new byte;
    do
    {
        size = zipInStream.Read(buffer, 0, buffer.Length);
        fileStreamOut.Write(buffer, 0, size);
    } while (size > 0);
    zipInStream.Close();
    fileStreamOut.Close();
    fileStreamIn.Close();


J'ai bien ajouté la référence de la Sharp zip lib et ajouté en haut du code l'utilisation de cette référence.

using ICSharpCode.SharpZipLib.Zip;
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
15 févr. 2011 à 14:03
En revanche le principe de unzip -> Modifier puis Reziper me plait bien. Au début je pensais effectuer les modifications directement dans le .zip.

Merci de l'aide que vous pourez m'apporter pour pouvoir unzip un .zip depuis mon programme en choisissant le fichier depuis le bouton "Choose the .XAP (même si pour l'instant j'essaie déjà sur des .zip)
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
15 févr. 2011 à 14:10
Quel genre d'erreur?
Je n'ai malheureusement rien sous la main pour tester...je marche donc à l'aveuglette.
Tu fais bien de travailler sur des zip directement. Il te faudra juste renommer ton xap en zip et ce sera fini

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
15 févr. 2011 à 14:27
Je crois que c'est un problème de compatibilité entre VS 08 et VS 10.. Le code proviens de VS 08, moi j'ai 10.

Mais j'ai trouvé un truc intéressant,
private void buttonOpenFile_Click(object sender, EventArgs e)
        {
            //show a openfiledialog to select a file
            OpenFileDialog f = new OpenFileDialog();
            f.Multiselect = false;
            if (f.ShowDialog() == DialogResult.OK)
            {
                textBoxFileName.Text = f.FileName;
            }
        }

        private void buttonOK_Click(object sender, EventArgs e)
        {
            if (textBoxFileName.Text != "")
            {
                if (radioButtonZip.Checked == true)
                {
                    //start a new thread to zip it
                    Thread th = new Thread(new ThreadStart(Zip));
                    th.Start();
                }
                else
                {
                    //start a new thread to unzip it
                    Thread th = new Thread(new ThreadStart(UnZip));
                    th.Start();
                }
            }
        }


C'est une partie du code source d'un logiciel de Zip/Unzip.

Je vais essayer de l'adapter dans le mien. Pour le moment juste unzip.

Je pense bientôt réussir à extraire le contenue du .zip, je galère un peu. Je post le code dès que ça marche :)
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
15 févr. 2011 à 14:37
private void button6_Click(object sender, EventArgs e)
        {
            if (textBoxFileName.Text != "")
            {
                Thread th = new Thread(new ThreadStart(Unzip));
                th.Start();
            }
        }


J'ai cette erreur, je ne sais pas trop à quoi ça correspond. Certainement parce que je fais du plagiat de code..

"le nombre (Unzip) n'existe pas dans le contexte actuel"
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
15 févr. 2011 à 14:46
Unzip est sûrement la méthode appelé pour faire le travail de décompression...
Regarde dans le code que tu as récupéré: il faut que tu récupères également cette méthode (et Zip par la même occasion).

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
15 févr. 2011 à 14:49
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.SharpZipLib.Zip;
using System.IO;
using System.Threading;

namespace ZipTest
{
    public partial class FormZip : Form
    {
        public FormZip()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            radioButtonZip.Checked = true;
        }

        private void buttonOpenFile_Click(object sender, EventArgs e)
        {
            //show a openfiledialog to select a file
            OpenFileDialog f = new OpenFileDialog();
            f.Multiselect = false;
            if (f.ShowDialog() == DialogResult.OK)
            {
                textBoxFileName.Text = f.FileName;
            }
        }

        private void buttonOK_Click(object sender, EventArgs e)
        {
            if (textBoxFileName.Text != "")
            {
                if (radioButtonZip.Checked == true)
                {
                    //start a new thread to zip it
                    Thread th = new Thread(new ThreadStart(Zip));
                    th.Start();
                }
                else
                {
                    //start a new thread to unzip it
                    Thread th = new Thread(new ThreadStart(UnZip));
                    th.Start();
                }
            }
        }

        private void Zip()
        {
            toolStripStatusLabel1.Text = "Zipping...";
            SetButtonOK(false);
            ZipHelp.Zip(textBoxFileName.Text, textBoxFileName.Text + ".zip", 4096);
            toolStripStatusLabel1.Text = "Done";
            SetButtonOK(true);
        }

        private void UnZip()
        {
            toolStripStatusLabel1.Text = "UnZipping...";
            SetButtonOK(false);
            ZipHelp.UnZip(textBoxFileName.Text, Path.GetDirectoryName(textBoxFileName.Text), 4096);
            toolStripStatusLabel1.Text = "Done";
            SetButtonOK(true);
        }

        //the method to set button's state
        private void SetButtonOK(bool Enable)
        {
            if (buttonOK.InvokeRequired)
                buttonOK.Invoke(new SetEnableCallBack(SetButtonOK), new object[] { Enable });
            else
                buttonOK.Enabled = Enable;
        }

        //delegate to call back
        delegate void SetEnableCallBack(bool Enable);
    }
}


C'est le code que j'ai récup.

Eux utilise un "radio button" pour choisir entre zip et Unzip" moi je vais faire deux boutons distincts!
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
15 févr. 2011 à 14:58
Pas de soucis

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
15 févr. 2011 à 16:57
Rien ne marche... Le bouton 6 est censé enclencher le unzip mais j'arrive pas à faire tourner les codes que je trouve sur le net. J'ai changé de référence, j'ai pris DotNetLib Ionic.zip.dll

Il donne des exemples de code pour extraire ou zippé mais rien ne marche.. c'est chiant d'être nul !
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
15 févr. 2011 à 17:15
Tu ne vas pas y arriver en changeant 36 fois de références car forcément, ton code sera plus bon.
Dans ton cas, pas besoin de thread.
Tu dispose de 2 boutons: Zip et Unzip.
Dans la callback de chaque bouton, avec SharpLibZip, tu as "juste" à mettre le code adéquat. Par exemple, pour Unzip:
ZipInputStream s = new ZipInputStream(zipFilePath);  // ici, je suppose que zipFilePath contient le chemin vers le fichier zip
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
  string directoryName = Path.GetDirectoryName(theEntry.Name);
  string fileName = Path.GetFileName(theEntry.Name);
  string folder = "C:\\monDossier\";   // ici, c'est le répertoire qui va recevoir le contenu de ton zip

  // create directory
  Directory.CreateDirectory(folder +directoryName);
  if (fileName != String.Empty)
  {
    FileStream streamWriter = File.Create((folder + theEntry.Name));
    int size = 2048;
    byte[] data = new byte[2048];
    while (true)
    {
      size = s.Read(data, 0, data.Length);
      if (size > 0)
      {
        streamWriter.Write(data, 0, size);
      }
      else
      {
        break;
      }
    }
    
    streamWriter.Close();
  }
}
s.Close();


Essaie déjà ça avec un fichier zip "simple", c'est-à-dire qui n'a pas de dossier dedans.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ThGraf Messages postés 58 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 14 juillet 2012
15 févr. 2011 à 19:31
C'est un .zip sur mon bureau avec juste une image dedans.
0
Rejoignez-nous