Erreur dans mon code...

djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010 - 16 févr. 2010 à 04:51
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 26 févr. 2010 à 11:59
Bonjour!
Alors voilà, je fais un programme qui doit:
- lister les fichiers audio d'un dossier et afficher le contenu dans une datagridview en plusieurs colonnes,
- lister les fichiers vidéos et faire pareil, pour plus tard lol!

J'ai comencer ça, mais j'ai un soucis dans mon code que voici:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class MediaManager : Form
    {
        public MediaManager()
        {
            InitializeComponent();
            //Désactivation du Browser et de sa txtBox
            btnParcourir.Enabled = false;
            txtBoxCheminAcces.Enabled = false;
        }

        private void MediaManager_Load(object sender, EventArgs e)
        {

        }

        private void btnMusique_Click(object sender, EventArgs e)
        {
            //Activations des boutons
            btnVideo.Enabled = false;
            btnParcourir.Enabled = true;
            txtBoxCheminAcces.Enabled = true;
        }

        private void btnVideo_Click(object sender, EventArgs e)
        {
            //Activation des boutons
            btnMusique.Enabled = false;
            btnParcourir.Enabled = true;
            txtBoxCheminAcces.Enabled = true;
        }

        private void btnParcourir_Click(object sender, EventArgs e)
        {
            //Déclaration des variables et création de la datatable
            string strFilter;
            int nbFichiers = 0;
            DataTable dataTable=new DataTable();
            //Création du browser
            FolderBrowserDialog browser = new FolderBrowserDialog();
            //Le browser pointe sur Mes documents par défaut
            browser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            //Pas de création de dossier nécessaire
            browser.ShowNewFolderButton = false;
            //Test pour savoir quel texte afficher dans le browser, quels filtres utiliser et quelles colonnes créer
            if (btnMusique.Enabled)
            {
                browser.Description = "Sélectionnez un dossier contenant des musiques:";
                strFilter = "*.mp3;*.wav;*.ogg";
                dataTable.Columns.Add("Nom", typeof(string));
                dataTable.Columns.Add("Artiste", typeof(string));
                dataTable.Columns.Add("Titre", typeof(string));
                dataTable.Columns.Add("Album", typeof(string));
                dataTable.Columns.Add("Année", typeof(string));
                dataTable.Columns.Add("Genre", typeof(string));
            }
            else
            {
                browser.Description = "Sélectionnez un dossier contenant des vidéos:";
                strFilter = "*.avi;*.mpeg;*.mpg;*.wmv;*.mov";
                dataTable.Columns.Add("Nom", typeof(string));
                dataTable.Columns.Add("Année", typeof(int));
                dataTable.Columns.Add("Genre", typeof(string));
                dataTable.Columns.Add("Réalisateur", typeof(string));
                dataTable.Columns.Add("Acteurs", typeof(string));
            }
            //Si l'utilisateur à selectionné un dossier et cliqué sur ok alors on récup le chemin
            if (browser.ShowDialog() == DialogResult.OK)
            {
                txtBoxCheminAcces.Text = browser.SelectedPath;
            }
            //Création de la liste des fichiers en utilisant le filtre et affichage du nombre de fichiers ok
            string[] m_arExt = strFilter.Split(';');
            foreach (string filtres in m_arExt)
            {
                string[] sources = Directory.GetFiles(browser.SelectedPath, filtres);
                nbFichiers = sources.Count();
                lblNbFichiers.Text = nbFichiers.ToString();
            }
            //Création des sources de la datagrid
            if (btnMusique.Enabled)
            {
                for (int i = 0; i < nbFichiers; i++)
                {
                    dataTable.Rows.Add();
                    TagLib.File fichier = TagLib.File.Create(browser.SelectedPath);
                    dataTable.Rows.Add(new object[6] { Path.GetFileName(browser.SelectedPath), fichier.Tag.Performers, fichier.Tag.Title, fichier.Tag.Album, fichier.Tag.Year, fichier.Tag.Genres });
                }
            }
            //Affectation des sources
            listeAffiche.DataSource = dataTable;

        }

    }

}



Le code n'a pas l'air de lister correctement mes fichiers. Je me demande si c'est parce qu'il ne les trouve pas (lblNbFichiers reste à 0 lors de l'execution), ou alors une mauvaise manipulation de ma dataTable etc. (C'est la première fois que j'utilise datasource, datagridview ou datatable...
Je suis donc la pour faire appel à plus malin que moi et surtout pour apprendre!
Merci de votre coup de main!
Bonne nuit...

Tchus

12 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
16 févr. 2010 à 10:07
Salut

Ton problème est ici :
foreach (string filtres in m_arExt)
{
    string[] sources = Directory.GetFiles(browser.SelectedPath, filtres);
    nbFichiers = sources.Count();
    lblNbFichiers.Text = nbFichiers.ToString();
}


J'explique ce que fais ton code. Il récupère tous les .mp3 à la racine de ton répertoire musique. Il les compte, et met le nombre de MP3 dans lblNbFichiers. Ensuite, il récupère tous les .wav à la racine. Il les compte et remplace la valeur de nbFichiers et de lblNbFichiers par le nombre de Wave. Enfin, il récupère tous les .ogg à la racine. Il les compte et remplace la valeur de nbFichiers et de lblNbFichiers par le nombre de Vorbis.

A la fin de ton foreach, la seule chose que tu aies gardé, c'est le nombre de .ogg à la racine de ton répertoire musique.

Il faut donc remplacer la ligne
nbFichiers = source.Count();
par
nbFichiers += source.Count();

Ainsi, nbFichiers, après ta boucle, contiendra à la fois les .mp3, les .wav et les .ogg.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010
16 févr. 2010 à 11:37
Salut!
MErci pour ta réponse krimog, ça m'a permis d'avancer, le programme liste bien les fichiers du répertoire (lblNbFichiers contient la valeur juste).
Par contre, il crée bien les lignes mais:
-Il y a une ligne de trop (* dans la première colonne)
-Les champs sont vides
J'ai aussi eu un problème d'exception de la part de taglib_csharp mais je ne sais pas quoi mettre dans le catch...
Voilà le bout de code modifié:
foreach (string filtres in m_arExt)
            {
                string[] sources = Directory.GetFiles(browser.SelectedPath, filtres);
                nbFichiers += sources.Count();
                lblNbFichiers.Text = nbFichiers.ToString();
            }
            //Création des sources de la datagrid
            if (btnMusique.Enabled)
            {
                for (int i = 0; i < nbFichiers; i++)
                {
                    try
                    {
                        dataTable.Rows.Add();
                        TagLib.File fichier = TagLib.File.Create(browser.SelectedPath);
                        dataTable.Rows.Add(new object[6] { Path.GetFileName(browser.SelectedPath), fichier.Tag.Performers, fichier.Tag.Title, fichier.Tag.Album, fichier.Tag.Year, fichier.Tag.Genres });
                    }
                    catch
                    {

                    }
                }
            }


Merci du coup de main.
Tchuss
0
djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010
16 févr. 2010 à 11:40
J'ai oublié,
J'aimerais aussi que mon programme liste les sous-répertoires.
Je ne sais pas comment faire..
Puis-je toujours utiliser Directory.Getfiles pour y arriver?
Merci!
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
16 févr. 2010 à 12:26
Pour les sous-répertoires : regarde ici.

En ce qui concerne l'exception : une exception est un comportement ANORMAL. Le try / catch permet de passer outre ce comportement. Mais le mieux est de faire en sorte qu'il n'y ait pas d'exception. Cependant, tu ne précises pas quelle exception tu rencontres, et je ne connais pas la bibliothèque TagLib, donc sans plus de précisions, je ne peux pas t'aider à ce point de vue là.

En ce qui concerne le fait que ton tableau soit vide, oui, c'est évident, tu ajoutes à chaque fois une nouvelle ligne vide (dataTable.Rows.Add()).
Si tu veux avoir tes fichiers, la première chose c'est de conserver le tableau contenant les fichiers :
List<string> listeFichiers = new List<string>();
foreach (string filtres in m_arExt)
{
    listeFichiers.AddRange(Directory.GetFiles(browser.SelectedPath, filtres);
}
nbFichiers = listeFichiers.Count;
lblNbFichiers.Text = nbFichiers.ToString();


Et après, avant de faire dataTable.Rows.Add(); tu crées un DataRow que tu remplis et que tu transmets comme paramètre à la méthode Add()
DataRow maLigne = dataTable.NewRow();
maLigne["NomDeLaColonne"] = maValeur;
maLigne["NomDeMonAutreColonne"] = monAutreValeur;
dataTable.Rows.Add(maLigne);


Tu peux utiliser listeFichiers[i] pour les valeurs. Tu peux également remplacer ton for par un foreach sur listeFichiers.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0

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

Posez votre question
djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010
16 févr. 2010 à 12:51
Voilà mon code actuel!
Le problème c'est que je ne sais pas trop comment dire a ma boucle for de s'occuper de chaque ligne de ma Liste listeFichiers..
Du coup il ne me crée plus qu'une ligne, je vois le problème mais je ne sais pas utiliser les listes...
Pour l'exception, c'est UnsupportedFormatException, je n'en sais pas plus...
Merci de ton aide krimog.
string[] m_arExt = strFilter.Split(';');
            List<string> listeFichiers = new List<string>();
            foreach (string filtres in m_arExt)
                {
                     listeFichiers.AddRange(Directory.GetFiles(browser.SelectedPath, filtres));
                }
            nbFichiers = listeFichiers.Count;
            lblNbFichiers.Text = nbFichiers.ToString();
            //Création des sources de la datagrid et utilisation de tgalib_sharp
            if (btnMusique.Enabled)
            {
                for (int i = 0; i < nbFichiers; i++)
                {
                    try
                    {
                        DataRow ligne = dataTable.NewRow();
                        TagLib.File fichier = TagLib.File.Create(browser.SelectedPath);
                        ligne["Nom"] = Path.GetFileName(browser.SelectedPath);
                        ligne["Artiste"] = fichier.Tag.Performers;
                        ligne["Titre"] = fichier.Tag.Title;
                        ligne["Album"] = fichier.Tag.Album;
                        ligne["Année"] = fichier.Tag.Year;
                        ligne["Genre"] = fichier.Tag.Genres;
                        ligne["Chemin"] = browser.SelectedPath;
                        dataTable.Rows.Add(ligne);
                    }
                    catch
                    {

                    }
                }
            }
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
16 févr. 2010 à 13:49
Je crois voir d'où vient ton problème :
browser.SelectedPath renvoie un répertoire, pas un fichier.
Donc Path.GetFileName(browser.SelectedPath) et TagLib.File.Create(browser.SelectedPath) ne marcheront pas correctement (c'est également ça qui te génère (probablement) ton exception.

remplace donc browser.SelectedPath par listeFichiers[i].

enfin, RETIRE ton try catch !!
Si tu as une exception qui est générée (et donc une interruption de ton programme), c'est probablement que tu as fait une erreur dans ton code !

Normalement, moins tu mets de try catch, mieux ton programme marchera.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010
17 févr. 2010 à 02:34
Re!!!
Alors voilà, mon programme arrive à lister mes fichiers audio et à en lire les tags. De plus la datagrid fonctionne aussi!
Par contre, j'ai encore quelques points à éclaircir...
Les voici:
-Pour ce qui est de mes try/catch, j'aimerais les virer mais après je me retrouve avec des erreurs dans mon programme... Comment faire?
-J'aimerais fixer la taille de certaine colonne de ma datagrid mais je ne sais pas comment faire. J'ai testé
listeAffiche.Columns[4].Width = 10;

Par exemple, ici, la colonne Année qui ne contiendra toujours que 4 chiffres ne doit pas être si large que celle qui contient le chemin d'accès. Lorsque je teste ce code, j'ai une erreur:
ArgumentOutOfRangeException

L'index est "hors des limites" il me dit.
-Ensuite j'aimerais activer les scrollbars horizontales et verticales.
De sorte que, si l'utilisateur élargi une colonne plus loin que le bord droit de la datagrid, une scrollbar apparait.
Ou alors, si le dossier scanné contient plus de fichiers que ce qui est visible à l'écran, alors une scrollbar verticale apparait. Pour l'instant, s'il y a trop de fichiers, je ne peux pas descendre, pourtant il y en a encore, le dernier visible étant coupé en 2!
-Enfin, je me demande comment faire pour adapter la datagrid et les autres composants à la taille de la fenêtre (bouton réduire/agrandire et modification manuelle avec le coin de la fenêtre).

Encore pas mal de trucs à penser quoi...

Voilà mon code actuel:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class MediaManager : Form
    {
        public MediaManager()
        {
            InitializeComponent();
            //Désactivation du Browser et de sa txtBox
            btnParcourir.Enabled = false;
            txtBoxCheminAcces.Enabled = false;
            listeAffiche.Enabled = false;
        }

        private void MediaManager_Load(object sender, EventArgs e)
        {

        }

        private void btnMusique_Click(object sender, EventArgs e)
        {
            //Activations des boutons
            btnVideo.Enabled = false;
            btnParcourir.Enabled = true;
            txtBoxCheminAcces.Enabled = true;
        }

        private void btnVideo_Click(object sender, EventArgs e)
        {
            //Activation des boutons
            btnMusique.Enabled = false;
            btnParcourir.Enabled = true;
            txtBoxCheminAcces.Enabled = true;
        }

        private void btnParcourir_Click(object sender, EventArgs e)
        {
            //Déclaration des variables et création de la datatable
            string strFilter;
            int nbFichiers = 0;
            listeAffiche.AutoSize = true;
            DataTable dataTable=new DataTable();
            //Création du browser
            FolderBrowserDialog browser = new FolderBrowserDialog();
            //Le browser pointe sur Mes documents par défaut
            browser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            //Pas de création de dossier nécessaire
            browser.ShowNewFolderButton = false;
            //Test pour savoir quel texte afficher dans le browser, quels filtres utiliser et quelles colonnes créer
            if (btnMusique.Enabled)
            {
                browser.Description = "Sélectionnez un dossier contenant des musiques:";
                strFilter = "*.mp3;*.wav;*.ogg";
                dataTable.Columns.Add("Nom", typeof(string));
                dataTable.Columns.Add("Artiste", typeof(string));
                dataTable.Columns.Add("Titre", typeof(string));
                dataTable.Columns.Add("Album", typeof(string));
                dataTable.Columns.Add("Année", typeof(int));
                dataTable.Columns.Add("Genre", typeof(string));
                dataTable.Columns.Add("Chemin", typeof(string));
            }
            else
            {
                browser.Description = "Sélectionnez un dossier contenant des vidéos:";
                strFilter = "*.avi;*.mpeg;*.mpg;*.wmv;*.mov";
                dataTable.Columns.Add("Nom", typeof(string));
                dataTable.Columns.Add("Année", typeof(int));
                dataTable.Columns.Add("Genre", typeof(string));
                dataTable.Columns.Add("Réalisateur", typeof(string));
                dataTable.Columns.Add("Acteurs", typeof(string));
                dataTable.Columns.Add("Chemin", typeof(string));
            }
            //Si l'utilisateur à selectionné un dossier et cliqué sur ok alors on récup le chemin
            if (browser.ShowDialog() == DialogResult.OK)
            {
                txtBoxCheminAcces.Text = browser.SelectedPath;
                listeAffiche.Enabled = true;
            }
            //Création de la liste des fichiers en utilisant le filtre et affichage du nombre de fichiers ok
            string[] m_arExt = strFilter.Split(';');
            List<string> listeFichiers = new List<string>();
            foreach (string filtres in m_arExt)
                {
                     listeFichiers.AddRange(Directory.GetFiles(browser.SelectedPath, filtres));
                }
            string[] listeRep = listeFichiers.ToArray();
            nbFichiers = listeFichiers.Count;
            lblNbFichiers.Text = nbFichiers.ToString();
            //Création des sources de la datagrid et utilisation de tgalib_sharp
            if (btnMusique.Enabled)
            {
               
                for (int i = 0; i <= listeRep.Length;i++ )
                {
                    try
                    {
                        DataRow ligne = dataTable.NewRow();
                        TagLib.File fichier = TagLib.File.Create(listeRep[i]);
                        ligne["Nom"] = Path.GetFileName(listeRep[i]);
                        ligne["Artiste"] = fichier.Tag.FirstArtist;
                        ligne["Titre"] = fichier.Tag.Title;
                        ligne["Album"] = fichier.Tag.Album;
                        ligne["Année"] = fichier.Tag.Year;
                        ligne["Genre"] = fichier.Tag.FirstGenre;
                        ligne["Chemin"] = listeRep[i];
                        dataTable.Rows.Add(ligne);
                     
                    }
                    catch
                    {

                    }
                }
            }
            //Affectation des sources
            listeAffiche.RowHeadersVisible = false;
            listeAffiche.DataSource = dataTable;
            
            
        }

   

    }

}
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
17 févr. 2010 à 09:49
Salut

Alors, pour les scrollbars, je ne peux pas te dire exactement. Mais si tu fais quelques recherches sur "scrollbars datatable c#", je pense que tu trouveras ton bonheur.

En ce qui concerne l'adaptation à la taille de la fenêtre, je crois que c'est la propriété Dock, dans mes souvenirs.

Quant à l'exception générée lors du redimensionnement, es-tu sûr de bien le faire APRÈS avoir créé les différentes colonnes ?

Pour ton try catch, je t'ai dis, il faut éviter de le mettre : il faut plutôt corriger l'erreur produite.
Pour l'instant, tu ne précises rien sur l'erreur en question, on ne risque pas de pouvoir t'aider.
Pour rappel : un try catch, c'est un moyen de se rattraper avec une erreur. Le mieux, c'est encore d'être sûr qu'il n'y aura pas d'erreur. De plus, si tu ne mets pas de code dans le catch, ça devient juste un code pour cacher une erreur.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010
19 févr. 2010 à 03:29
Re!!!
Alors voila, j'ai viré l'exception donc plus de try/catch et j'ai réussi à définir une taille à mes colonnes, mais j'aimerais pouvoir la regler en % de la largeur de la datagrid (en fonction de la taille de la fenetre!).
Je n'ai toujours pas réussi à faire apparaitre les scrollbars, la propriété Scrollbars de ma datagrid étant sur "both". J'ai tenté de toucher à pas mal de trucs mais sans succès...C'est pas mal ennuyant car pas moyen de voir les éléments hors écran...
Ma priorité c'est de les faires apparaitre, car impossible de laisser ca comme ca!
Voici mon code en entier si ça peut en interresser, malgré que les propriété de la dataGrid sont définies en mode Designer...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class MediaManager : Form
    {
        public MediaManager()
        {
            InitializeComponent();
            //Désactivation du Browser et de sa txtBox
            btnParcourir.Enabled = false;
            txtBoxCheminAcces.Enabled = false;
            listeAffiche.Enabled = false;
        }

        private void MediaManager_Load(object sender, EventArgs e)
        {

        }

        private void btnMusique_Click(object sender, EventArgs e)
        {
            //Activations des boutons
            btnVideo.Enabled = false;
            btnParcourir.Enabled = true;
            txtBoxCheminAcces.Enabled = true;
        }

        private void btnVideo_Click(object sender, EventArgs e)
        {
            //Activation des boutons
            btnMusique.Enabled = false;
            btnParcourir.Enabled = true;
            txtBoxCheminAcces.Enabled = true;
        }

        private void btnParcourir_Click(object sender, EventArgs e)
        {
            //Déclaration des variables et création de la datatable
            string strFilter;
            int nbFichiers = 0;
            listeAffiche.AutoSize = true;
            DataTable dataTable=new DataTable();
            //Création du browser
            FolderBrowserDialog browser = new FolderBrowserDialog();
            //Le browser pointe sur Mes documents par défaut
            browser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            //Pas de création de dossier nécessaire
            browser.ShowNewFolderButton = false;
            //Test pour savoir quel texte afficher dans le browser, quels filtres utiliser et quelles colonnes créer
            if (btnMusique.Enabled)
            {
                browser.Description = "Sélectionnez un dossier contenant des musiques:";
                strFilter = "*.mp3;*.wav;*.ogg";
                dataTable.Columns.Add("Nom", typeof(string));
                dataTable.Columns.Add("Artiste", typeof(string));
                dataTable.Columns.Add("Titre", typeof(string));
                dataTable.Columns.Add("Album", typeof(string));
                dataTable.Columns.Add("Année", typeof(int));
                dataTable.Columns.Add("Genre", typeof(string));
                dataTable.Columns.Add("Chemin", typeof(string));
            }
            else
            {
                browser.Description = "Sélectionnez un dossier contenant des vidéos:";
                strFilter = "*.avi;*.mpeg;*.mpg;*.wmv;*.mov";
                dataTable.Columns.Add("Nom", typeof(string));
                dataTable.Columns.Add("Année", typeof(int));
                dataTable.Columns.Add("Genre", typeof(string));
                dataTable.Columns.Add("Réalisateur", typeof(string));
                dataTable.Columns.Add("Acteurs", typeof(string));
                dataTable.Columns.Add("Chemin", typeof(string));
            }
            //Si l'utilisateur à selectionné un dossier et cliqué sur ok alors on récup le chemin
            if (browser.ShowDialog() == DialogResult.OK)
            {
                txtBoxCheminAcces.Text = browser.SelectedPath;
                listeAffiche.Enabled = true;
            }
            //Création de la liste des fichiers en utilisant le filtre et affichage du nombre de fichiers ok
            string[] m_arExt = strFilter.Split(';');
            List<string> listeFichiers = new List<string>();
            foreach (string filtres in m_arExt)
                {
                    listeFichiers.AddRange(Directory.GetFiles(browser.SelectedPath, filtres));
                }
            string[] listeRep = listeFichiers.ToArray();
            nbFichiers = listeFichiers.Count;
            lblNbFichiers.Text = nbFichiers.ToString();
            //Création des sources de la datagrid et utilisation de tgalib_sharp
            if (btnMusique.Enabled)
            {
                                           
                for (int i = 0; i < listeRep.Length;i++ )
                {
                        DataRow ligne = dataTable.NewRow();
                        TagLib.File fichier = TagLib.File.Create(listeRep[i]);
                        ligne["Nom"] = Path.GetFileName(listeRep[i]);
                        ligne["Artiste"] = fichier.Tag.FirstArtist;
                        ligne["Titre"] = fichier.Tag.Title;
                        ligne["Album"] = fichier.Tag.Album;
                        ligne["Année"] = fichier.Tag.Year;
                        ligne["Genre"] = fichier.Tag.FirstGenre;
                        ligne["Chemin"] = listeRep[i];
                        dataTable.Rows.Add(ligne);
                    
                }
                //Affectation des sources
                listeAffiche.RowHeadersVisible = false;
                listeAffiche.DataSource = dataTable;
                listeAffiche.Columns["Nom"].Width = 150;
                listeAffiche.Columns["Artiste"].Width = 150;
                listeAffiche.Columns["Titre"].Width = 150;
                listeAffiche.Columns["Album"].Width = 150;
                listeAffiche.Columns["Année"].Width = 50;
                listeAffiche.Columns["Genre"].Width = 100;
                listeAffiche.Columns["Chemin"].Width = 150;
            }
                        
        }

   

    }

}


A demain pour la suite, j'espère!!!
0
djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010
26 févr. 2010 à 01:45
Re!!!
Alors voilà, toujours en progression pour ce mediamanager!
J'ai avancer un peu, maintenant j'arrive à lancer le fichier selectionné avec vlc, apres je compte essayer d'integrer vlc dans le prog mais pour l'instant je me contente du fonctionnel!
Ca marche nickel si je n'ai pas d'espaces dans le path complet du fichier...
Assez embetant étant donné que pas mal de fichiers ou dossiers en contiennent... J'ai cherché sur internet, la solution etant
(@"""c:/dossier/Mon dossier/mon mp3 avec espace.mp3""")

Malheureusement je n'utilise pas cette syntaxe car je stock le path dans une variable fichier... Mon code étant:
(@fichier)

Je ne sais pas trop quoi faire, j'avais aussi suivi une piste avec trim() mais je n'ai pas réussi.
A part cela, toujours pas de scrollbars, je me demande vraiment pourquoi, je n'ai touché à rien et d'après ce que j'ai pu lire elles sont présentent par défaut en sélectionnant "both"...
Voilà désolé de vous harceler mais j'un fouillé mes livres, pdf etc et rien ne me vient en aide...
Merci d'avance!!!
Voici mon code, juste la fin;
using System.Diagnostics;

 private void LaunchVLC(string arg)
        {
            ProcessStartInfo processInfo = new ProcessStartInfo(@"C:\Program Files\VideoLAN\VLC\vlc.exe", arg);
            Process myProcess = Process.Start(processInfo);
            myProcess.Close();
        }

        
                 

        private void btnLire_Click(object sender, EventArgs e)
        {
            string fichier;
            fichier = listeAffiche[6, listeAffiche.CurrentRow.Index].Value.ToString();
                 
            LaunchVLC(@fichier);
            
        }


Encore merci!
0
djgje Messages postés 20 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 4 mai 2010
26 févr. 2010 à 10:53
Probleme d'espaces résolu avec la ligne:

LaunchVLC(@"""" + fichier + @"""");


Plus que ce probleme de scrollbars, si quelqu'un a une idee...

++
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
26 févr. 2010 à 11:59
Pour la scrollbar, je n'ai toujours pas de solution.

Cependant, quelques détails sur ton problème de guillemets.
Le but était de contenir cette chaine :
"c:/dossier/Mon dossier/mon mp3 avec espace.mp3"
et non
c:/dossier/Mon dossier/mon mp3 avec espace.mp3

Il fallait donc rajouter des guillemets avant et après ta chaine, alors que les guillemets sont les caractères de début et fin de chaine en C#.
Il existe 2 solutions :
- un @ avant la chaine, qui dit de marquer les caractères tels qu'ils sont dans la chaine, mais il faut cependant doubler les guillemets
- un \ avant tout caractère spécial.

maVar = @"""c:/dossier/Mon dossier/mon mp3 avec espace.mp3""";
maVar = ""c:/dossier/Mon dossier/mon mp3 avec espace.mp3"";


Le système utilisant @ est souvent utilisé pour les chemins de fichiers, car ceux-ci s'écrivent normalement avec des \ pour séparer les dossiers.

maVar = @"c:\dossier\Mon dossier\mon mp3 avec espace.mp3";
maVar = "c:\\dossier\\Mon dossier\\mon mp3 avec espace.mp3";


Cependant, à part le cas précis des chemins d'accès à des fichiers, la deuxième syntaxe est préférée.

Voici quelques exemples de caractères spéciaux
\\ => \
\n => <retour à la ligne>
\t => <tabulation>
" => "
\' => '

Donc l'autre solution est celle-ci :
LaunchVLC(""" + fichier + """);


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous