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

C# Discussion :

pourquoi le chemin n'est pas pris en compte


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 039
    Par défaut pourquoi le chemin n'est pas pris en compte
    Bonjour

    Je tente de gérer un fichier INI pour enregistrer quelques paramètres de mon application (tailel fenetre, sa position etc....)
    J'ai mis en place la classe trouvée ici
    http://www.codeproject.com/Articles/...-class-using-C
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    using System;
    using System.Runtime.InteropServices;
    using System.Text;
     
    namespace Ini
    {
        /// <summary>
        /// Create a New INI file to store or load data
        /// </summary>
        public class IniFile
        {
            public string path;
     
            [DllImport("kernel32")]
            private static extern long WritePrivateProfileString(string section,
                string key,string val,string filePath);
            [DllImport("kernel32")]
            private static extern int GetPrivateProfileString(string section,
                     string key,string def, StringBuilder retVal,
                int size,string filePath);
     
            /// <summary>
            /// INIFile Constructor.
            /// </summary>
            /// <PARAM name="INIPath"></PARAM>
            public IniFile(string INIPath)
            {
                path = INIPath;
            }
            /// <summary>
            /// Write Data to the INI File
            /// </summary>
            /// <PARAM name="Section"></PARAM>
            /// Section name
            /// <PARAM name="Key"></PARAM>
            /// Key Name
            /// <PARAM name="Value"></PARAM>
            /// Value Name
            public void IniWriteValue(string Section,string Key,string Value)
            {
                WritePrivateProfileString(Section,Key,Value,this.path);
            }
     
            /// <summary>
            /// Read Data Value From the Ini File
            /// </summary>
            /// <PARAM name="Section"></PARAM>
            /// <PARAM name="Key"></PARAM>
            /// <PARAM name="Path"></PARAM>
            /// <returns></returns>
            public string IniReadValue(string Section,string Key)
            {
                StringBuilder temp = new StringBuilder(255);
                int i = GetPrivateProfileString(Section,Key,"",temp, 
                                                255, this.path);
                return temp.ToString();
     
            }
        }
    }
    Elle fonctionne trés bien, le INI est créé, avec les valeurs que je veux et tout et tout mais si je crée un objet en spécifiant ainsi le chemin du fichier ini souhaité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string filename = "toto.ini";
                IniFile ini = new IniFile(filename);
    Le fichier est créé dans C:\Users\moi\AppData\Local\VirtualStore\Windows

    si je crée l'object en spécifiant ainsi le chemin du fichier ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                string filename = "c:\toto.ini";
                IniFile ini = new IniFile(filename);
    Cela va toujours au même endroit C:\Users\moi\AppData\Local\VirtualStore\Windows

    Quoi que je mette comme chemin ca me crée toujours le fichier ini dans ce répertoire

    pourquoi ? Comment créer le fichier ini là où je le souhaite (là où se trouve l'exécutable)

    Merci

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Citation Envoyé par petitours Voir le message
    Cela va toujours au même endroit C:\Users\moi\AppData\Local\VirtualStore\Windows

    pourquoi ? Comment créer le fichier ini là où je le souhaite (là où se trouve l'exécutable)
    C'est tout à fait normal. Tu essayes d'écrire dans un dossier où tu n'a pas les droits d'écriture du fait Windows virtualise et stocke ton fichier à un endroit où tu as les droits d'écriture.

    Si tu ne veux pas avoir de problème tu stockes le fichier dans APPDATA ou tu donnes les droits administrateurs à ton programme.

  3. #3
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 039
    Par défaut
    Bonjour

    et ben si tous les trucs que l'on trouve dans ce répertoire virtalStore sont le fruit de développeurs qui n'ont pas posés de question sur développez.com, ca en fait !...


    En fouinant un peu j'ai cru comprendre que le mieux était d'utiliser cette commande pour accéder à appData
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "tatuti.ini");
    Ca marche bien mais ca ne mets pas à la racine de appData mais dans le repertoire "roaming".

    C'est ça le répertoire utilisateur pointé par Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData ? ou c'est encore Windows qui fait le grand écart pour me mettre mon fichier là où il veut ?

    Merci

  4. #4
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Salut,

    Quand tu écrit un chemin le \ risque de te posé problème car la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string filename = "c:\toto.ini";
    de mémoire il te fait une tabulation dans ta chaine de caractère.
    Soit tu mets donc un autre caractère d’échappement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string filename = "c:\\toto.ini";
    Soit tu mets un @ devant pour spécifier que c'est un chemin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string filename = @"c:\toto.ini";
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour MarieKisSlaJoue

    As-tu essaye plutot:LocalApplicationData...
    voici ce qu'en dit la msdn doc:

    ApplicationData:

    The directory that serves as a common repository for application-specific data for the current roaming user.
    A roaming user works on more than one computer on a network.
    et
    LocalApplicationData:
    The directory that serves as a common repository for application-specific data that is used by the current, non-roaming user.
    lien msdn:
    http://msdn.microsoft.com/en-us/libr...olderpath.aspx

    bon code...........

  6. #6
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 039
    Par défaut
    Merci, je crois que j'ai pigé

    Mais du coup je fais un écart sur un autre soucis que ceci me soulève :
    J'avais compris qu'avec la couche intermédiaire formée par le framework, une appli .NET pouvait être distribuée sur n'importe quelle plateforme, du moment qu'il y avait un framework pour cette plateforme.
    Mais ce que nous venons de voir sur les répertoires users est une subtilité de Windows, windows 7 même si je ne m'abuse... Du coup, comment ca se passe pour la portabilité de l'appli, sur un windows plus ancien (XP par exemple) ou sur un mac, linus ou que sais je ?

    Merci

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Par défaut
    Pour les chemins, les OS Windows savent indiquer à ton application où se trouvent leur dossier

    Pas de Framework .Net sur Mac/Linux .. Il faut alors passer par une machine virtuelle pour pouvoir y faire tourner l'application.

    Il y a un projet Mono pour Linux qui permettait d'exécuter des appli .Net sur Linux fut un temps .. Mais j'ai aucune idée de ce que c'est devenu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/08/2006, 11h00
  2. Problème avec un div qui n'est pas pris en compte
    Par boss_gama dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 25/07/2006, 16h32
  3. Réponses: 5
    Dernier message: 01/07/2006, 12h52
  4. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

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