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 :

Conversion d'espace dans chaine


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 264
    Points : 311
    Points
    311
    Par défaut Conversion d'espace dans chaine
    Bonjour,

    Je suis en train de réaliser un installateur qui va lancer un script. Le chemin par défaut est C:/Programmes Files/... Or il y a un espace entre Programmes et Files .

    Quand j'essai de lancer mon script, il ne se lance pas. Quand je ne mets pas d'espace dans le chemin d'installation, il se lance.

    Je voudrais donc convertir les blancs de ma chaine de caractère mais je ne trouve pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // On récupère le chemin d'installation
    chemin = iter.Current.SelectSingleNode("DossierInstall").Value;
    this.chemin = "'" + chemin + "'";
    Cela ne fonctionne pas. Je voudrais remplacer le " " par "%20" par ex mais bon ca c'est du PHP.

    Je ne sais pas si je me suis bien fait comprendre.

    Merci d'avance

  2. #2
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    La seule methode fiable (mais pas portable) est d'utiliser l'API Win32 et la methode GetShortPathName. Comme tu parles d'un installateur et surtout de C:/Programmes Files/... je crois que la prtabilite ne compte pas beaucoup dans ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
            private static extern int GetShortPathName(
                     [MarshalAs(UnmanagedType.LPTStr)] string path,
                     [MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath,
                     int shortPathLength);
     
            public static string ToShortPathName(string path)
            {
                StringBuilder pathBuffer = new StringBuilder(255);
                GetShortPathName(path, pathBuffer, pathBuffer.Capacity);
                return pathBuffer.ToString();
            }
    La deuxieme methode n'est qu'une simple enveloppe de la premiere mais elle est plus .NET
    Voila comment tu peux l'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                string path = @"C:\Program Files\Common Files\";
                string shortPath = ToShortPathName(path);
    Je te conseille quand meme de reviser un peu le code qui lance le script et le script lui meme afin d'eliminer ce probleme (si possible).

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Rien à redire sur la méthode de scifire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     string path = @"C:\Program Files\Common Files\";
     string shortPath = ToShortPathName(path);
    Alors, juste à titre informatif pour Shifty_
    pour remplacer une chaine de caractère par une autre
    tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String.Replace (Char, Char)   
    String.Replace (String, String)
    ça te sera peut être utile ds l'avenir

  4. #4
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 264
    Points : 311
    Points
    311
    Par défaut
    Bonsoir,

    J'ai un fait un copier/coller de tes fonctions et j'ai adapté les appelles pour mon programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Récupration du rpertoire d'installation
                    installFolder = Context.Parameters["assemblypath"];
                    // Transformation pour ne garder que le dossier d'installation
                    String temp = installFolder.Substring(0, installFolder.LastIndexOf('\\') + 1);
                    this.installFolder = temp.Replace("\\", "/");
     
                    // string path = @"C:\Program Files\Common Files\";
                    this.installFolder = ToShortPathName(this.installFolder);
    Mon problème est que la chaine qu'y met retourné est null. Je ne pense pas que le probleme vienne du temp.RePlace. Je ne comprend pas trop ton code donc si tu as des expliquations.
    En tout cas merci bien de m'avoir répondu et donné une solution.
    Ah oui pendant que j'y pense je donne mon code pour exécuter le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void ExecSrcipt()
            {
                Process proc = new Process();            
                // Instructions pour éxécuter le script
                proc.StartInfo.FileName = "wscript";
                proc.StartInfo.Arguments = installfoder + "Script.js";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.RedirectStandardOutput = false;
                proc.Start();
                proc.Close();
            }

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HttpUtility.UrlEncode (String)
    HttpUtility.UrlDecode (String)

  6. #6
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 264
    Points : 311
    Points
    311
    Par défaut
    Dsl c'est encore moi.

    Je vais apparaitre comme une plait mais je ne trouve pas l'import à faire pour trouver HttpUtility.
    Apparemment c'est un System.Web ou un truc similaire mais ca ne marche pas.

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par Shifty_
    Dsl c'est encore moi.

    Je vais apparaitre comme une plait mais je ne trouve pas l'import à faire pour trouver HttpUtility.
    Apparemment c'est un System.Web ou un truc similaire mais ca ne marche pas.
    une plaie

    bah si ça marche bien, j'ai même testé avant d'envoyer le tip

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string s = HttpUtility.UrlEncode("C:\\Mes Documents\\TOto titi tutu");

    System.Web

  8. #8
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 264
    Points : 311
    Points
    311
    Par défaut
    Pour ma part, un erreur est générée :
    Le nom 'HttpUtility' n'existe pas dans le contexte actuelle.
    Alors que j'ai fait un : using System.Web;

    Je ne sais pas s'il y a un rapport ou non mais je ne fait pas un site internet. C'est un installateur de service windows.

    Merci de toutes ces réponses.

  9. #9
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 264
    Points : 311
    Points
    311
    Par défaut
    Bonjour,


    En fait j'ai résolu mon problème. Il fallait juste que je rajoute des doubles cotes au début et à la fin du chemin.

    Ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "\"" + chemin + "Script.js\"";
    En tout cas, merci beaucoup à tous les gens qui m'ont donné un coup de main.

    Bye

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

Discussions similaires

  1. Supprimer espaces dans chaine
    Par totot dans le forum Général Java
    Réponses: 6
    Dernier message: 21/09/2014, 19h39
  2. Suppression espaces dans chaine caractères
    Par Hawaisunset dans le forum SAP
    Réponses: 2
    Dernier message: 12/02/2013, 16h00
  3. effacer les espaces dans chaine de caracteres
    Par dev0712 dans le forum Débuter
    Réponses: 4
    Dernier message: 08/12/2008, 01h09
  4. Réponses: 18
    Dernier message: 27/06/2006, 18h37
  5. [sql] Espace dans chaine
    Par Kasanova75 dans le forum Oracle
    Réponses: 6
    Dernier message: 07/03/2006, 14h27

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