Problème pour l'enregistrement de mon XML

Résolu
nicolashodbert Messages postés 6 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 29 juin 2006 - 26 juin 2006 à 17:21
nicolashodbert Messages postés 6 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 29 juin 2006 - 29 juin 2006 à 16:28
Mon but est de faire une appli avec une base de donnee en xml sur les mp3 et ensuite de les lires.une sorte de playlist mais un peu plus complet
En mode debug, j'ouvre mon open file dialog pour charger le fichier mp3.
les tag  artist titre ect s'affiche ensuite sur mes textbox une fois valider.
mes donnés sont mise dans un listview. j'appuie sur le bouton enregistrer pour mettre toutes les donnés de mon listview sur le xml, rien ne s'enregistre sur mon fichier.xml..
Et Quand j'écris manuellement dans mes textbox : titre, artiste, duré de la chanson, l'origine du fichier...sans utiliser mon openfileDialog
çà fonctionne nickel.
 Cà fait une semaine que je me défonce les neurones et les recherches sur les sites je n'ai rien trouver.J'utilise la librairie "bass.dll".
Merci pour votre aide.
Nico

6 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
27 juin 2006 à 08:17
Salut,
Il faudrait plus d'infos sur la façon dont tu sauves le fichier par exemple. Comment tu récupères le path de l'openFileDialogu, etc (un peu de code est toujours bienvenu pour aider).

<hr size= "2" /> VC# forever
=13319
3
nicolashodbert Messages postés 6 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 29 juin 2006
27 juin 2006 à 14:50
Voici le code source lorsqu'on clique sur le bouton pour ouvrir le fichier:
Je te remercie sincèrement pour ton aide

private

void Button_OpenFile_Click(object sender
, EventArgs e
){

this
.openFileDialog4
.FileName
= _fileLoad
;

if ( DialogResult
.OK
== this
.openFileDialog4
.ShowDialog(this
) ){

if ( File
.Exists(this
.openFileDialog4
.FileName
)){

_fileLoad
= this
.openFileDialog4
.FileName
;

if (_fileLoad
!= String
.Empty
){

// create the stream

J'ai mis cett fonction car je voulais faire une autre solution
pour voir ce que çà beuggait 
au lieu de le mettre ici
charger();

}

else

{

int error
= Bass
.BASS_ErrorGetCode();

Console
.WriteLine( Enum
.GetName(typeof(BASSErrorCode
), error
) );

}

}

}

}

private void charger(){

_stream
= Bass
. BASS_StreamCreateFile (_fileLoad
, 0, 0, BASSStream
.BASS_SAMPLE_SOFTWARE
| BASSStream
.BASS_SAMPLE_FLOAT
);

long len
= Bass
.BASS_ChannelGetLength(_stream
); // length in bytes

totaltime
= Bass
. BASS_ChannelBytes2Seconds (_stream
, len
); // the total time length

string m_fileLoad
;

TxtBx_Duree.Text = totaltime.ToString();

m_fileLoad
= _fileLoad
. ToString ();

// Pour avoir les tag on ouvre la librairie tag de bass.dll et de tag.dll

TAG_INFO tagInfo
= new TAG_INFO(m_fileLoad
);

if ( BassTags
.BASS_TAG_GetFromFile( _stream
, tagInfo
) ){

n_artist
= tagInfo
.artist
;

n_title
= tagInfo
.title
;

n_genre
= tagInfo
.genre
;

n_filename
= tagInfo
.filename
;

sFichier
= tagInfo
.filename
;

sArtiste
= tagInfo
.artist
;

sTitre
= tagInfo
.title
;

sCategorie
= "Musique";

sType
= "mp3";

sGenre
= tagInfo
.genre
;

sVol
= 10;

sCue
= 2;

sDepart
= 1;

sDureeFader
= 2;

sDateLu
= "Jamais lu";

sClassementTop
= 50;

sDuree
= totaltime
;

TxtBx_Auteur
.Text
= sArtiste
;

TxtBx_Titre
.Text
= sTitre
;

CmBx_Genre
.Text
= sGenre
;

TxtBx_OrFichier
.Text
= n_filename
;

TxtBx_OrFichier
.Text
= sFichier
;

TxtBx_OrFichier
. Focus ();

Bass
.BASS_StreamFree(_stream
);

_stream
= 0;}

}

une fois que c'est OK
on met à jour l'array list et le list view



private

void btnOk_Click(object sender, EventArgs e){

// Sauvegarde des valeurs dans l'arraylist

m_arraylist.Fichier = TxtBx_OrFichier.Text;

m_arraylist.Artiste = TxtBx_Auteur.Text;

m_arraylist.Titre = TxtBx_Titre.Text;

m_arraylist.Categorie = CmBx_Categorie.Text;

m_arraylist.Type = CmBx_Type.Text;

m_arraylist.Genre = CmBx_Genre.Text;

m_arraylist.Vol = Int32. Parse (TxtBx_Vol.Text);

m_arraylist.Cue =Single.Parse(TxtBx_Fin.Text);

m_arraylist.Depart = Single. Parse (TxtBx_Depart.Text);

m_arraylist.DureeFader = Int32.Parse(TxtBx_Fader.Text);

m_arraylist.DateLu = TxtBx_DateHeure.Text. ToString ();

m_arraylist.ClassementTop = Int32.Parse(TxtBx_Top.Text);

m_arraylist.Duree = Single. Parse (TxtBx_Duree.Text);

// OK pour traitement OK dans le MainForm

DialogResult = DialogResult.OK;

// Fermeture du formulaire
une autre classe attend la fermeture du formulaire en appuyant sur Ok
pour mettre à jour et l'ajouter sur  l'item du listview et de l'array list

this
.Close();}

Après tous ceci
Celà fonctionne
l'arraylist et le list view se met à jour Pas de problème

Une fois ceci fait je l'enregistre sur l'XML et là pas de mise à jour sur l'xml????
sauf si je le fait manuellement en écrivant sur les textbox.



La fonction qui sert à enregistrer sur l'XML
parmi une classe

public

void Save(string fichier){

// Sérialisation de la liste des comptes suivant le format de la liste des comptes

XmlSerializer ser = new XmlSerializer (typeof(FileList));

// Format d'écriture du fichier

XmlTextWriter writer = new XmlTextWriter(fichier, System.Text.Encoding.UTF8);

// write a readable file

writer.Formatting = Formatting.Indented;

// Remplissage du fichier avec le contenu de la sérialisation

ser.Serialize(writer, this
);

// Fermeture du fichier

writer.Close();}
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
27 juin 2006 à 23:26
La variable fichier contient un path valide?
Sinon, mets un try-catch autour de ser.Serialize, et regarde l'exception qu'il te crache!

<hr size= "2" /> VC# forever
=13319
0
nicolashodbert Messages postés 6 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 29 juin 2006
28 juin 2006 à 18:03
Voilà, j'ai mis les try et catch comme tu m'avais dit...
j'ai fait une nouvelle classe de façon à ce que une boite de dialogue s'ouvre lorsqu'il y a un crash et me dit l'erreur. 
Le compilateur ne me dit aucune erreur.
J'en ai mis un petit peu partout, mais rien n'y fait.

Au fait merci pour les execpetion, j'avais complètement oublié que çà existait.

j'envoie quand même la source, on ne sait jamais...

public

void Save(string fichier
){

try

{

// Sérialisation de la liste des comptes suivant le format de la liste des comptes

XmlSerializer ser
= new XmlSerializer (typeof(FileList
));

// Format d'écriture du fichier

XmlTextWriter writer
= new XmlTextWriter(fichier
, System
.Text
.Encoding
.UTF8
);

// write a readable file

writer
.Formatting
= Formatting
.Indented
;

// Remplissage du fichier avec le contenu de la sérialisation

ser
. Serialize (writer
, this
);

// Fermeture du fichier

writer
.Close();}

catch (glexeption e
){

// Voici ma nouvelle classe que j'initialise
lorsqu'il y l'erreur
m_Dialog r
= new m_Dialog();

r
.Show();

r
.erreur
= e
.Message
.ToString();}

}
0

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

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 juin 2006 à 08:46
C'est quoi "glexeption " ?

Mets plutôt ceci :

catch(Exception e
)
{
   MessageBox.Show("Erreur", e.Message);
}

<hr size= "2" /> VC# forever
=13319
0
nicolashodbert Messages postés 6 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 29 juin 2006
29 juin 2006 à 16:28
j'ai essayé
 toujours pas de message d'erreur
glexeption est une classe que j'ai faite, celà permet de personnaliser son message.
J' ai vu cà dans mon bouqin C#.Net
Je travaille avec SharpDevelopp.
SharpDevelopp a conçu une boite de dialogue personnaliser pour les execptions qui permet de récupérer les bugs de son application et si l'on veut on peut les transférer
sur son site et  les développeur corrige les problèmes.
J'ai fait à peu près pareil

Je crois que pour mon application je vais essayer autre chose, je me documente pour savoir s'il ya d'autre mode de sérilization de xml.

Je te remercie Bidou
0
Rejoignez-nous