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 :

C# : Caractère non accepté dans la méthode SaveAs [Débutant]


Sujet :

C#

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut C# : Caractère non accepté dans la méthode SaveAs
    Bonjour tout le monde,

    Je suis entrain de réaliser une application permettant de copier et donc d'enregistrer un mail dans un dossier.
    Cela fonctionne sauf que j'obtiens un problème lorsque le sujet du mail contient soit * ou soit : et d'autre caractère certainement.
    Voici mon bout de 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
     
    try
                {
                    if (textBox1.Text != "")
                    {
                        //NameValueCollection section = (NameValueCollection)ConfigurationManager.GetSection("MonGroupe/MaSectionUne");
                        string chemin = Properties.Settings.Default.chemin;
                        string dossier_mail = Properties.Settings.Default.dossier_mail;
                        string extension = Properties.Settings.Default.extension;
     
                        string numcc = "CC" + textBox1.Text.PadLeft(8, '0');
                        string sujet = textBox2.Text;
                        Outlook.Application app = new Outlook.Application();
                        object temp = app.ActiveExplorer().Selection[1];
                        Outlook.MailItem item = (temp as Outlook.MailItem);
     
                        // Récupération de la date du jour.
                        int date1 = DateTime.Now.Year;
                        int date2 = DateTime.Now.Month;
                        int date3 = DateTime.Now.Day;
                        int date4 = DateTime.Now.Hour;
                        int date5 = DateTime.Now.Minute;
                        int date6 = DateTime.Now.Second;
                        // Création de la variable "date_jour" permettant de le mettre au dos de chaque titre de mail.
                        string date_jour = '_'+date1.ToString() + date2.ToString().PadLeft(2, '0') + date3.ToString().PadLeft(2, '0') + date4.ToString().PadLeft(2, '0') + date5.ToString().PadLeft(2, '0') + date6.ToString().PadLeft(2, '0');
     
                        if (System.IO.Directory.Exists(@chemin + numcc + @dossier_mail) == false)
                        {
                            System.IO.Directory.CreateDirectory(@chemin + numcc + @dossier_mail);
                        }
     
                        item.SaveAs(@chemin + numcc + @dossier_mail + sujet + date_jour + extension, Outlook.OlSaveAsType.olMSG);
     
                        if (System.IO.File.Exists(@chemin + numcc + @dossier_mail + sujet + date_jour + extension))
                        {
                            this.Width = 157;
                            this.Height = 108;
                            textBox1.Text = "";
                            MessageBox.Show("L'enregistrement à été effectuée.");
                        }
                        else
                        {
                            MessageBox.Show("Une erreur est survenue.");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Le numéro de commande doit être saisi.");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    J'ai essayer en mettant "sujet.replace(":", "")", ça fonctionne mais je trouve ça pas beau du tout.
    Y a t-il une autre possibilité pour encoder les caractère spéciaux en C# ?

    Merci par avance pour votre aide.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tu peux utiliser une simple regex. Celle-ci est une whitelist contenant les caractères autorisés :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var text = "This i{s a t&%ex=t? with sp§e%c$ia+l chars.";
    var result = Regex.Replace(text, @"[^0-9a-zA-Z\s]+", "");
    // Résultat : This is a text with special chars

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Je vient de tester et en effet cela fonctionne mais j'aimerais si possible que les caractère ne soit pas obligatoirement remplacé mais de faire en sorte qu'il les acceptes tout de même.

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    ce que tu demandes n'est pas possible dans la mesure où le système de nommage des fichiers sous un OS (Windows ou autre) est contraint par des restrictions
    vis à vis de certains caractères.

    Donc, il faut accepter cette contrainte de nommage ou bien alors, passer par un autre système, type base de données.

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Impossible, ce sont des caractères réservés par Windows :
    - Character Sets Used in File Names
    - Naming Files, Paths, and Namespaces

    [EDIT]
    Oups, grillé par theMonz31

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Ok je vous remercie pour votre aide, tant pi, je vais remplacer les caractères pas des espaces alors si j'ai pas le choix

    Cordialement.
    Loïc.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/04/2013, 23h33
  2. Réponses: 6
    Dernier message: 24/04/2009, 13h34
  3. [Thread] appel de méthodes non-synchronized dans une méthode synchronized
    Par dr23fr dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 24/06/2008, 22h47
  4. caractère non accepté
    Par intelcore dans le forum Serveurs (Apache, IIS,...)
    Réponses: 4
    Dernier message: 30/06/2007, 20h58
  5. Problème de caractères non latin dans un formulaire
    Par Huntress dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2006, 13h34

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