Enregistrer le contenu d'un formulaire dans un fichier XML

Fermé
Rulergogo78 Messages postés 35 Date d'inscription vendredi 20 février 2015 Statut Membre Dernière intervention 27 septembre 2016 - 1 juin 2016 à 18:03
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 1 juin 2016 à 23:52
Bonjour,
Je programme actuellement en VB.Net, je ne débute pas dans ce langage de programmation . Mais j'aurais bien besoin d'aide pour cette fois ;-)
J'ai suivis un tutoriel pour créer sa propre extension de fichier en VB.Net .
C'est relativement simple car le framework nous facilite la vie :-)
J'ai donc choisis le XML ...
Voici le lien du tutoriel vous comprendrez :
https://www.leblogduhacker.fr/vb-net-creer-sa-propre-extension/
J'ai aussi quelques problèmes au niveau de l’extension :
- L'icône de mon logiciel ne s'affiche pas directement sur le fichier créer (C'est car le fichier par exemple (TEST.Extension) n'est pas directement associer à mon logiciel par défaut , je dois aller le chercher et dire à l'ordinateur qu'il faut toujours utiliser mon logiciel pour ouvrir les fichier (.Extension). J'ai aussi crypter mon fichier Xml (qui comporte mon extension) pour que celui ci ne s'ouvre qu'avec mon logiciel et pas avec le bloc note ou autres ...
Voici mon code :

Imports System.IO
Imports System.Xml
Imports System.Text
Imports System.Security.Cryptography
Public Class Form1

    Sub associerExtension()

        Dim extension As String = ".osms"
        Dim nomSansPoint As String = extension.Substring(1, extension.Length - 1) 'on aura uniquement test1
        Dim cheminFinalProgramme As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments

        My.Computer.Registry.ClassesRoot.CreateSubKey(extension).SetValue("", nomSansPoint, Microsoft.Win32.RegistryValueKind.String)
        My.Computer.Registry.ClassesRoot.CreateSubKey(nomSansPoint & "\shell\open\command").SetValue _
            ("", cheminFinalProgramme & " ""%l"" ", Microsoft.Win32.RegistryValueKind.String)

    End Sub
    Public Sub LireXML(ByVal XML As String)

        Dim documents As New XmlDocument
        documents.LoadXml(XML)
        Dim prenom As XmlNodeList = documents.GetElementsByTagName("Prenom")
        Dim nom As XmlNodeList = documents.GetElementsByTagName("Nom")
        'On va parcourir tous les élements Prénoms, ici un seul
        For i As Integer = 0 To prenom.Count = 1
            SouhaiterBienvenue(prenom(i).InnerText, nom(i).InnerText)
        Next


    End Sub

    Public Sub SouhaiterBienvenue(ByVal prenom As String, ByVal nom As String)

        Dim utilis As String = String.Format("{0} {1}", prenom, nom)
        Label1.Text = utilis 'on souhaite la bienvenue à l'utilisateur ayant enregistré le fichier test1


    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try 'on gère les erreurs 
            If My.Computer.Registry.ClassesRoot.OpenSubKey(".osms") Is Nothing Then

                'si l'extension n'est pas encore associée, on l'associe.
                associerExtension()

            End If
        Catch ex As Exception
            MsgBox("Erreur !") 'message très descriptif..
        End Try

        'on obtient les arguments, à savoir le nom du fichier avec lequel le prog s'est ouvert
        For Each argument As String In Environment.GetCommandLineArgs()

            If argument.Contains(".osms") Then 'si il contient notre extension

                TextBox3.Text = TextBox3.Text & argument 'on affiche le chemin du fichier test1
                LireXML(Decryptage(My.Computer.FileSystem.ReadAllText(argument)))

            End If
        Next
    End Sub
    Sub enregistrerPref()

        Dim donneesXML As String = "<?xml version=""1.0"" encoding=""utf-8"" ?>" 'ligne nécessaire pour adhérer au standard
        donneesXML = String.Concat(donneesXML, vbNewLine, "<Enregistrement>") 'notre balise principale
        donneesXML = String.Concat(donneesXML, vbNewLine, vbTab, "<Prenom>" & TextBox2.Text & "</Prenom>")
        donneesXML = String.Concat(donneesXML, vbNewLine, vbTab, "<Nom>" & TextBox1.Text & "</Nom>")
        donneesXML = String.Concat(donneesXML, vbNewLine, "</Enregistrement>")

        'on enregistre sous notre propre extension (et ici, sur le bureau)
        Using sr As New StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) & "\monEx.osms")
            sr.Write(Cryptage(donneesXML))
        End Using

    End Sub

    Public Function Cryptage(ByVal donnees As String) As String

        Dim sha1 As New SHA1Managed
        Convert.ToBase64String(sha1.ComputeHash(Encoding.ASCII.GetBytes(donnees)))
        Dim donneeCryptees() As Byte = ASCIIEncoding.ASCII.GetBytes(donnees)
        Dim cryptageEnString As String = Convert.ToBase64String(donneeCryptees)
        Return cryptageEnString

    End Function
    Public Function Decryptage(ByVal Data As String) As String

        Dim dd() As Byte = Convert.FromBase64String(Data)
        Dim decryptageEnString As String = Encoding.ASCII.GetString(dd)
        Return decryptageEnString

    End Function
    Sub ajouterIcone()
        My.Computer.Registry.ClassesRoot.OpenSubKey(".osms").CreateSubKey("DefautIcon").SetValue("", ",0")
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        enregistrerPref()
    End Sub
End Class

Mon objectif principal , c'est de pouvoir enregistrer le contenu de plusieurs textboxs dans mon fichier xml , et quand j'ouvre celui ci avec mon logiciel , les mots écrit dans les textboxs apparaissent .
Exemple :
J'ai 2 textboxs et 1 bouton


Quand je clique sur le bouton "Enregistrer" il faut que le contenu des textboxs soit enregistrer dans un fichier xml créer en même temps (Moi mon extension xml je l'est nommer (".OSM") )
Comme ça quand je ferme le logiciel et que je clique sur mon fichier xml :

Ça m'ouvre mon logiciel et ça me remet le contenu de mes textboxs .
Comme ça pour plusieurs fichiers . Si j'ouvre test1 par exemple : alors textbox1 = "Hôpital" et la textbox2 = "Garage" admettons...
J'espère que vous pourrez m'aider , merci beaucoup (-:


A voir également:

1 réponse

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié par Whismeril le 1/06/2016 à 23:52
Bonsoir


Plusieurs remarques:
  • Je suis toujours étonné du principe d'aller chercher un tuto ailleurs et quand on ne le comprends pas de poser des questions ici et pas directement à l'auteur...
  • J'ai suivis un tutoriel pour créer sa propre extension de fichier en VB.Net .

C'est relativement simple car le framework nous facilite la vie :-)

Si j'ai bien compris tu as créé une extension .Tartenpion que tu as associé avec un logiciel de ta facture.
Ça c'est du fonctionnement de Windows, pas du .Net.
Dans l'explorateur, tu fais click droit / Ouvrir Avec, tu vas chercher ton programme et tu cliques sur "Toujours utiliser ce programme".

Il faut juste que tu programmes sache prendre en ligne de commande l'adresse du fichier, mais tous les langages savent faire ça.

Donc au final dans ce bout de code, il ne s'agit pas de créer une extension, mais de remplacer la technique manuelle d'association dans windows à un programme.

  Sub associerExtension()

        Dim extension As String = ".osms"
        Dim nomSansPoint As String = extension.Substring(1, extension.Length - 1) 'on aura uniquement test1
        Dim cheminFinalProgramme As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments

        My.Computer.Registry.ClassesRoot.CreateSubKey(extension).SetValue("", nomSansPoint, Microsoft.Win32.RegistryValueKind.String)
        My.Computer.Registry.ClassesRoot.CreateSubKey(nomSansPoint & "\shell\open\command").SetValue _
            ("", cheminFinalProgramme & " ""%l"" ", Microsoft.Win32.RegistryValueKind.String)

    End Sub


Bon déjà cette ligne présente un défaut
        Dim nomSansPoint As String = extension.Substring(1, extension.Length 

admettons que lors d'une modification tu décides passer l'extension en paramètre, et qu'à un moment tu la passes sans le point, ça va te couper un caractère.
Dim nomSansPoint As String = extension.Replace(".","")
t'éviterais ce risque. Dans l'absolue il faudrait aussi vérifier qu'il n'y a pas de caractères interdits, avec une Regex par exemple.

La partie écriture xml du tuto est nulle. Les outils contenus dans l'espace de nom System.Xml, servent à ne pas avoir à écrire un texte ou on ouvre et on ferme les balises à la main.... C'est quand même un comble d'écrire
Ici on va plutôt utiliser le standard XML, de plus qu’on a déjà pleins de fonctions prévues à cet effet dans le Framework qui nous simplifieront la vie"
et de n'utiliser aucun de ces outils.....
Si tu veux une méthode saine pour écrire du xml, va voir ici
https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net


J'imagine que si tu veux faire l'association par le code, c'est que tu comptes déployer l'appli sur plusieurs PC et que tu veux gagner du temps.
Il faut alors au premier démarrage de l'appli ou pendant le setup si tu en fais un, ou même à chaque fois qu'on cherche à ouvrir un fichier qui n'est pas associé, proposer à l'utilisateur d'associer et s'il l'accepte lancer cette méthode. Bon là ton code est un peu plus bourrin, il le fait (ou est sensé le faire je n'ai pas testé ton code, mais en lisant on dirait bien) sans rien demander puisque dans le load, il lance l'association.

Donc cette phrase m'interpelle
L'icône de mon logiciel ne s'affiche pas directement sur le fichier créer (C'est car le fichier par exemple (TEST.Extension) n'est pas directement associer à mon logiciel par défaut , je dois aller le chercher et dire à l'ordinateur qu'il faut toujours utiliser mon logiciel pour ouvrir les fichier (.Extension)
On vient de voir que ça c'est la procédure de base et que tu as écrit un code qui le fait pour toi sans même te le demander. Evidement il faut lancer l'exe au moins une fois.

Ensuite
Mon objectif principal , c'est de pouvoir enregistrer le contenu de plusieurs textboxs dans mon fichier xml ,

ça c'est ce que fait EnregistrerPref

et quand j'ouvre celui ci avec mon logiciel , les mots écrit dans les textboxs apparaissent .
et ça, c'est écrit dans le load après l'association.

Comme tu n'as pas posé de question, décrit de bug, de message d'erreur, etc... A part le fait que le tuto n'est pas top, ou est ton problème?


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0