IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Setup et écriture/lecture de données [Débutant]


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Setup et écriture/lecture de données
    Bonjour à toutes et tous

    Voici mon problème :

    J'ai créé un jeu accessible à tout le monde. Chaque nouveau joueur donne un pseudo et un mot de passe.
    Quand il valide, ceux-ci sont mémorisés dans un dossier personnalisé à son nom. Dans mon cas, cela donne :
    C:\Users\malco\Desktop\MOT_MYSTERE\Mot_Mystere 7.0\Mot_Mystere 5.0\bin\Debug\netcoreapp3.1\nomDuJoueur
    car c'est là que par défaut la propriété "WriteAllText" de C# enregistre des fichiers.
    Je sais créer un dossier "JOUEURS" dans mon projet et y mettre toutes les infos des joueurs mais cela ne change rien au problème de chemin relatif !!

    J'ai tenté de créer un dossier d'installation de 2 façons :

    1. avec Publier>ClickOnce : cela ne fonctionne pas.
    2. avec un Setup cela ne fonctionne pas non plus.
    Dans les 2 cas l'appli s'installe bien mais quand je la lance rien ne se passe.

    Le seul cas où cela fonctionne c'est si je l'installe sur MON ordinateur ! (il écrit les fichiers dans le chemin écrit plus haut)

    La raison je pense :
    le chemin d'accès aux fichiers écrit dans mon projet pour lire et écrire les données du joueur sur disque passe par un chemin local, celui de mon ordinateur.
    Je sais que la solution idéale serait d'utiliser la sérialisation mais je ne veux pas réécrire tout mon projet car cela fait un an que je travaille dessus et il est enfin prêt !!

    comment puis-je faire ?
    y a t'il un moyen d'inclure un dossier dans mon projet qui servirait de référence de chemin d'accès à l'écriture/lecture des données du joueur (avec "WriteAllText/ReadAllText") et d'importer celui-ci dans mon installation ?

    Je reste disponible si vous avez besoin d'autres infos. Au secours !! Je suis si proche de la fin !!

    Merci d'avoir pris le temps de me lire

    Bonne journée

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Quand tu utilises File.WriteAllText tu dois lui fournir un chemin.
    Qu'as tu mis ?

    Et puisque j'ai une petite idée de la réponse, voici un peu de doc qui te sera utile
    https://docs.microsoft.com/fr-fr/dot...r?view=net-5.0

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Application.StartupPath
    Bonjour popo

    Merci déjà d'avoir pris le temps de lire mon problème car j'en ai mis une tartine.

    Pour répondre à ta question sur le chemin que je fournis à File.WriteAllText c'est celui que j'ai mis dans mon 1er message. Il accède au dossier : bin\Debug\netcoreapp3.1 de mon projet.

    En fait, tout fonctionne sur mon ordinateur comme tu l'as compris. Cet idiot de programme (le miens ^^) écrit toutes les données de l'application publiée dans mon projet en cours !!
    je sais bien qu'il ne fait que ce que je lui programme de faire. C'est pourquoi j'ai besoin de lui donner un chemin qu'il pourra gérer quand il sera publié.

    Et là... j'en trouve de toutes les couleurs sur le net. : Application.StartupPath , "Accéder aux données locales et distantes dans les applications ClickOnce", utiliser le fichier temp de l'ordinateur distant. Waouh !! ma tête explose. Il y a tellement de possibilités, comment trouver la mienne ?

    Bon je vais lire la doc que tu m'a mis en lien et je t'en remercie.

    Espérons que ça va m'aiguiller vers la solution.

    Bonne journée

    PS : En temps j'ai essayé d'autres solutions. J'ai remplacé mon chemin d'accès par :

    1. private readonly string dossierDesJoueurs = Application.StartupPath; et la publication fonctionne bien sur mon ordinateur mais pas sur un autre ordinateur identique au mien.

    2. private readonly string dossierDesJoueurs = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); Idem, l'application s'installe parfaitement mais rien ne se passe (sur l'autre ordinateur).

    Mon dossier d'installation comprends ceci : Nom : dossier publication.png
Affichages : 162
Taille : 10,4 Ko (hmmm c'est sensé être une image en png mais je ne la vois pas dans ce message)

    Il comporte : dossier : Application Files + Launcher.exe + Mot_Mystere 5.0.application + Mot_Mystere 5.0.deps.json + Mot_Mystere 5.0.exe + Mot_Mystere 5.0.pdb + Mot_Mystere 5.0.runtimeconfig.json + setup.exe

    C'est tout .
    Depuis cette modification de chemin d'accès je je sais même plus où vont se nicher les dossiers des joueurs mais bon, ca fonctionne ... sur mon ordinateur seulement.. sniff... ne sais plus où chercher.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut impossible de lire ma publication sur un autre ordinateur similaire
    En temps j'ai essayé d'autres solutions. J'ai remplacé mon chemin d'accès par :

    1. private readonly string dossierDesJoueurs = Application.StartupPath; et la publication fonctionne bien sur mon ordinateur mais pas sur un autre ordinateur identique au mien.

    2. private readonly string dossierDesJoueurs = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); Idem, l'application s'installe parfaitement mais rien ne se passe quand je lance l'application via le menu programme (sur l'autre ordinateur).

    Mon dossier d'installation comprends ceci :
    Nom : dossier publication.png
Affichages : 185
Taille : 11,3 Ko

    C'est tout .

    Depuis cette modification de chemin d'accès je je sais même plus où vont se nicher les dossiers des joueurs mais bon, ca fonctionne ... sur mon ordinateur seulement.. sniff... ne sais plus où chercher.
    Images attachées Images attachées   

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Application.StartupPath, c'est le chemin où est exécutée ton application.
    Si tu l'installes dans un endroit requérant une élévation de privilège (genre un sous répertoire dans progam files), ça ne pourra pas fonctionner en l'état.

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), c'est le répertoire C:\Users\<User>\AppData\Roaming.
    où <User> est le nom de l'utilisateur, donc malco chez toi.

    Tu as normalement le droit d'écrire dedans mais ce n'est pas une bonne pratique, il faut créer un sous répertoire portant le nom de ton application.

    Pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    ProgramFiles            C:\Program Files (x86) 
    ProgramFilesX86         C:\Program Files (x86) 
    CommonProgramFiles      C:\Program Files (x86)\Common Files 
    CommonProgramFilesX86   C:\Program Files (x86)\Common Files 
    CommonApplicationData   C:\ProgramData 
    CommonStartMenu         C:\ProgramData\Microsoft\Windows\Start Menu 
    CommonPrograms          C:\ProgramData\Microsoft\Windows\Start Menu\Programs 
    CommonAdminTools        C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
    CommonStartup           C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 
    CommonTemplates         C:\ProgramData\Microsoft\Windows\Templates 
    UserProfile             C:\Users\<User> 
    LocalApplicationData    C:\Users\<User>\AppData\Local 
    CDBurning               C:\Users\<User>\AppData\Local\Microsoft\Windows\Burn\Burn 
    History                 C:\Users\<User>\AppData\Local\Microsoft\Windows\History 
    InternetCache           C:\Users\<User>\AppData\Local\Microsoft\Windows\INetCache 
    Cookies                 C:\Users\<User>\AppData\Local\Microsoft\Windows\INetCookies 
    ApplicationData         C:\Users\<User>\AppData\Roaming 
    NetworkShortcuts        C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Network Shortcuts 
    PrinterShortcuts        C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 
    Recent                  C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Recent 
    SendTo                  C:\Users\<User>\AppData\Roaming\Microsoft\Windows\SendTo 
    StartMenu               C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Start Menu 
    Programs                C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
    AdminTools              C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
    Startup                 C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
    Templates               C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Templates 
    Desktop                 C:\Users\<User>\Desktop 
    DesktopDirectory        C:\Users\<User>\Desktop 
    Favorites               C:\Users\<User>\Favorites 
    MyMusic                 C:\Users\<User>\Music 
    MyDocuments             C:\Users\<User>\OneDrive\Documents 
    MyDocuments             C:\Users\<User>\OneDrive\Documents 
    MyPictures              C:\Users\<User>\OneDrive\Pictures 
    MyVideos                C:\Users\<User>\Videos 
    CommonDesktopDirectory  C:\Users\Public\Desktop 
    CommonDocuments         C:\Users\Public\Documents 
    CommonMusic             C:\Users\Public\Music 
    CommonPictures          C:\Users\Public\Pictures 
    CommonVideos            C:\Users\Public\Videos 
    Windows                 C:\Windows 
    Fonts                   C:\Windows\Fonts 
    Resources               C:\Windows\resources 
    System                  C:\Windows\system32 
    SystemX86               C:\Windows\SysWoW64

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Merci
    Bonjour popo

    Tout d'abord milles excuses de ne pas t'avoir répondu avant mais je te remercie de ton post qui m'a vraiment aidé.

    J'ai un autre problème :

    Je cherche une choser simple et pourtant je rame depuis une semaine :
    Je développe un jeu en WPF.
    J'ai un dossier "jeu" que je sais créer et auquel je sais accéder (grâce à toi). Dedans j'ai des dossiers "joueur1, joueur2 etc..
    Sur un click je veux tester si le nom du dossier du "joueur1" par exemple existe bien dans le dossier "jeu".

    Je ne te listerai pas toutes les propriétés system IO que j'ai testé ce serait trop long.
    Franchement j'ai tout regardé (mal sans doute) sur internet avec toutes les possibilités mais je n'arrive pas à synthétiser toutes les solutions proposées et je suis en panne.

    Pourrais-tu à nouveau m'aider ?
    Merci

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Bonjour,

    Je ne doute pas que tu ai tenté diverses choses à partir de System.IO mais saches que tu obtiendras rarement une réponse toute faite dans ce forum.
    L'idée est que tu montres le code que tu as écrit et qu'à partir de là, nous t'aidons à le corriger.

    Petite piste toutefois, as tu regardé du coté de System.IO.Directory ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Directory lez bonheur
    Bonsoir popo

    Merci de ta réactivité. J'ai bien noté ta remarque qui est pleine de bon sens.

    Donc je vais te présenter un code que j'ai trouvé aujourd'hui sur "doc.microsoft.com" et adapté à mes besoins.
    Ce code fonctionne parfaitement et recherche si le dossier du joueur qui veut s'inscrire et jouer existe.

    Il est si simple que j'en suis tout décontenancé après avoir cherché vainement tous les Directory possibles, sans trouver la bonne solution.

    En fait, je cherchais à lister tous les dossiers des joueurs contenus dans mon dossier jeu et ensuite à parcourir la liste de ces dossiers
    et vérifier si le nom saisi par l'utilisateur avait déjà un dossier dans le jeu. Trop compliqué. Mais là !! génial !! Bravo Microsoft.

    Ce langage contient des trésors, qu'il est difficile de dénicher quand on n'est pas trop expérimenté.

    Mais la persévérance est payante. Je vais pouvoir continuer le développement de mon jeu pour enfants.

    Tu es une fois de plus ma bonne étoile on dirait.

    Que penses-tu de mon code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.IO;
     
    namespace dossiers
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            //Déclarations
            string docPath;
            List<string> mesDossiers = new List<string> { };
     
            public MainWindow()
            {
                InitializeComponent();
            }
     
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                //création du dossier du jeu
                Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + "Mot Magique");
     
                // je mémorise le chemin du dossier du jeu
                docPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + "Mot Magique";
            }
     
            private void btnValider_Click(object sender, RoutedEventArgs e)
            {
                string nomDuJoueur = txtPseudo.Text;
                DirectoryInfo di = new DirectoryInfo(docPath + "\\" + nomDuJoueur);
                try
                {
                    // Determine si le dossier existe.
                    if (di.Exists)
                    {
                        // Indique que le dossiere  existe.
                        txtTrouve.Text = "Joueur trouvé " + txtPseudo.Text;
                        return;
                    }
                    else
                    {
                        txtTrouve.Text = "Joueur non trouvé " + txtPseudo.Text;
                    }
                }
                catch (Exception ex)
                {
                    txtTrouve.Text = "Joueur trouvé " + txtPseudo.Text;
                }
                finally { }
            }
        }
    }
    Il n'y a que le catch exception dans lequel je ne sais trop quoi mettre !

    Merci d'avoir pris le temps de tout lire.

    Malcom

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Dans Window_loaded affecte en premier ta variable et sert t'en pour créer le répertoire cela évitera d'écrire deux fois le même code.

    Ensuite, au lieu de concaténer tes chemins avec des '\\', il est préférable d'utiliser Path.Combine()

    Pour savoir si un répertoire existe, il y a plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Directory.Exists(the_player_directory)
    .

    Le try catch est inutile ici.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut web link button
    Bonjour popo

    Merci pour tes infos qui m'ont été très utiles.

    Je fais à nouveau appel à toi pour un truc bête mais je ne trouve pas pourquoi ça ne fonctionne pas.
    Je veux lancer une page web par un clic de bouton.
    J'ai donc créé une Windows Form avec un simple bouton.


    J'ai écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    using System;
    using System.Windows.Forms;
     
    namespace internet
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void btnWeb_Click(object sender, EventArgs e)
            {
                try
                {
                    System.Diagnostics.Process.Start("https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Unable to open link that was clicked.");
                }
     
            }
        }
    }
    Le lien fonctionne dans le code (ctrl + clic pour vérifier) mais quand je lance l'application je n'ai que le message d'exception qui s'affiche.

    Aurais-tu la solution ?

    Bonne journée

    Malcom

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut trouvé accès web bizarre
    re bonjour popo

    j'au trouvé ceci qui fonctionne par hasard en farfouillant tout ce qui est possible sur le net.

    Mais peux-tu m'expliquer ces lignes ?

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    using System;
    using System.Windows.Forms;
    using System.Diagnostics;
     
    namespace internet
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void btnWeb_Click(object sender, EventArgs e)
            {
                ProcessStartInfo psi = new ProcessStartInfo
                {
                    FileName = "cmd",
                    Arguments = "/c start https://www.google.com"
                };
                Process.Start(psi);
            }
     
        }
    }
    A bientôt

    Malcom

  12. #12
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    En gros le cmd dans Filename va lancer le programme cmd.exe, donc l'invité de commande.

    La commande "start" dans l'invité de commande va chercher le meilleur programme pour lancer ce tu as mis comme argument à "start". Et puisqu'ici cet argument est une URL, cela lance ton navigateur par défaut sur cet URL.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut web et c#
    merci pour ton explication popo. C'est parfait je trouve.

    Mais pourquoi le script précédent que je t'ai mis ne fonctionne pas ? Question de plug in VS ? car sur les exemples que j'ai vu, les développeurs le conseillent tous.

    Seul un anglais a proposé cette dernière méthode qui pourtant me paraît tout à fait appropriée à n'importe quel besoin de lien internet en c#.

    Sinon :

    Un petit problème encore :

    j'utilise cette méthode pour trouver une lettre et sa position dans un mot :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    using System;
     
    namespace lettre_dans_un_mot
    {
        class Program
        {
            static void Main(string[] args)
            {
                string mot = "kiwi";
                char lettre = 'i';
                bool b = mot.Contains(lettre);
                if (b)
                {
                    int index = mot.IndexOf(lettre);
                    Console.WriteLine("'{0}' est dans le mot '{1}': sa valeur est {2}: à l'index {3}",
                    lettre, mot, b, index +1);
                }
            }
        }
    }
    Mais le résultat ne précise que le premier "i" trouvé à l'index 2. Comment avoir tous les index de cette lettre dans le mot index ?

    A bientôt et désolé de te solliciter autant.

    Malcom

  14. #14
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Le premier code fonctionne parfaitement mais ton URL est incorrecte et provoque l'exception.

    IndexOf peut prendre un autre paramètre pour indiquer à partir de quelle position rechercher.
    https://docs.microsoft.com/fr-fr/dot..._System_Int32_

    Ensuite, il suffit de boucler

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut trouvé& indexOff mais...
    Bonjour popo

    j'ai recherché et trouvé la solution dans les indexOff mais si ça fonctionne en procédural, ça ne veut pas en wpf.
    Je te montre les deux :

    1. wpf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    using System;
    using System.Windows;
     
    namespace testMotWPF
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            string mot;
            Char saisie;
     
            public MainWindow()
            {
                InitializeComponent();            
            }
     
     
            private void FindAllChar(Char target, String searched)
            {
                mot = txtMot.Text;
                saisie = Convert.ToChar(txtSaisie.Text);
     
                int startIndex = -1; // permettra d'annuler la méthode si la lettre n'est pas dans le mot (voir ligne 30)
                int hitCount = 0;
     
                // cherche toutes les occurences de la lettre mise en argument
                while (true)
                {
                    startIndex = searched.IndexOf(
                        target, startIndex + 1,
                        searched.Length - startIndex - 1);
     
                    // Sort de la boucle si la lettre n'est pas trouvée.
                    if (startIndex < 0)
                        break;
     
                    hitCount++;
                }
                tbInfos.Text = "La lettre " + target + " du mot " + searched + " existe " + hitCount + " fois dans le mot et le credit du joueur est de " + hitCount + " points.";
            }
     
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                FindAllChar(saisie, mot);
            }
        }
    }
    Images attachées Images attachées  

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut suite indexOff
    2. Procédural qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    using System;
     
    namespace lettre_dans_un_mot
    {
        class Program
        {
            static void Main(string[] args)
            {
                FindAllChar('i', "kiwi");
            }
            static void FindAllChar(Char target, String searched)
            {
                Console.Write(
                    "La lettre '{0}' dans le mot {1} existe à la position : ",
                    target, searched);
     
                int startIndex = -1; // initialise la valeur de la lettre à non trouvée et permettra 
                // d'annuler la méthode si la lettre n'est pas dans le mot (voir ligne 29)
                int hitCount = 0;
     
                // cherche toutes les occurences de la lettre mise en argument
                while (true)
                {
                    startIndex = searched.IndexOf(
                        target, startIndex + 1,
                        searched.Length - startIndex - 1);
     
                    // Sort de la boucle si la lettre n'est pas trouvée.
                    if (startIndex < 0)
                        break;
     
                    Console.Write("{0}, ", startIndex+1);
                    hitCount++;
                }
     
                Console.WriteLine("Il y a : {0} lettres trouvées", hitCount);
            }
        }
    }
    Merci de prendre du temps pour m'aider.

    Bonne journée

    Malcom

  17. #17
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Le message d'erreur est pourtant clair. searched est à null. Tu ne peux pas utilisé IndexOf sur un objet null.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    C'était un mauvais placement de variables.
    j'ai rectifié.
    merci

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Publier avec ClicOnce
    Bonjour popo et tous ceux qui pourraient m'aider

    J'ai un problème récurrent de publication de mes applications développées sur VS2019, que ce soit en Windows Form ou WPF.
    Je précise que je suis autodidacte, et que certains termes pro me laissent perplexe.

    Le problème survient lorsque je teste mon application sur un autre ordinateur.
    Sur le mien, aucun soucis. Sur un autre ordinateur identique au miens pas de soucis non plus.
    Sur un ordinateur différent (windows10 comme Windows 7), tout s'installe, aucun message d'erreur.
    Mais si je lance l'application via le menu démarrer, rien ne se produit. Silence total !
    Aucune information d'erreur. Comment savoir ce qui ne va pas ?

    Je vais essayer de vous fournir le maximum d'informations.

    Application WPF dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    using System;
    using System.Windows;
    using System.Text;
     
    namespace testMotWPF
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            string mot;
            Char saisie;
            private int startIndex;
     
            public MainWindow()
            {
                InitializeComponent();            
            }
     
            private void FindAllChar(char target, string searched)
            {
                startIndex = -1; // permettra d'annuler la méthode si la lettre n'est pas dans le mot (voir ligne 30)
                int hitCount = 0;
                string info1 = "La lettre " + target + " dans le mot " + searched + " existe à la position : ";
                // cherche toutes les occurences de la lettre mise en argument
                while (true)
                {
                    startIndex = searched.IndexOf(target, startIndex + 1,searched.Length - startIndex - 1);
                    info1 += startIndex + 1 + " et ";
                    // Sort de la boucle si la lettre n'est pas trouvée.
                    if (startIndex < 0)
                        break;
     
                    hitCount++;
                    tbInfos.Text = info1 + "et le nombre d'occurences est " + hitCount + ".";
                    //motTiret();
                }
            }
     
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                mot = txtMot.Text;
                //motTiret();
                saisie = Convert.ToChar(txtSaisie.Text);
                FindAllChar(saisie, mot);
            }
        }
    }
    Publication avec ClickOnce :

    - Emplacement de publication : je crée un dossier que j'utiliserai ensuite sur d'autres ordinateurs

    - Emplacement d'installation : A partir d'un lecteur CD ou autre

    - Paramètres > Fichiers d'application : voir capture. Je ne change rien
    Nom : parametres.png
Affichages : 120
Taille : 18,9 Ko

    - Signer les manifestes : je laisse en blanc

    - Configuration : voir capture. Si je ne met pas portable j'ai une erreur de publication
    Nom : configuration.png
Affichages : 112
Taille : 19,4 Ko

    J'espère avoir fourni tous les éléments nécessaires car ce sujet est un océan d'informations dans lesquelles je me perd.

    Merci d'avance

    Malcom
    Images attachées Images attachées  

  20. #20
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Tu as installé le framework sur la machine où ça ne fonctionne pas?

    Sinon dans le journal d'événements Windows tu auras plus d'informations.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Écriture/Lecture et traitement de données situées dans un .txt
    Par Zoqire dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 12/12/2017, 18h19
  2. Réponses: 3
    Dernier message: 03/12/2015, 11h02
  3. Réponses: 7
    Dernier message: 27/06/2005, 11h33
  4. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05
  5. lecture de données a partir de fichier
    Par sana dans le forum MFC
    Réponses: 5
    Dernier message: 21/01/2004, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo