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 :

Problème index en dehors du tableau


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut Problème index en dehors du tableau
    Bonjour,

    Débutante en C#, "ma programmation" est laborieuse.
    Et après avoir passé plusieurs heures à chercher des tutos, sur les forums... un problème persiste!!!
    Je m'explique.
    Mon programme doit permettre d'envoyer un mail avec une pièce jointe (en C# avec Visual Studio Express).
    Ce programme génère un .exe. Ensuite, via une autre application je devrais faire appel à cet exécutable en ayant pour paramètre (que je pourrais modifier) la pièce jointe, et le ou les destinataires. C'est pour cela que dans mon premier programme j'insiste sur le passage de paramètres. Seulement, lors de son exécution, j'obtiens une erreur disant que l'index est en dehors du tableau...

    Voici 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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    using System;
    using System.Net;
    using System.Net.Mail;
    using System.Net.Mime;
    using System.Threading;
    using System.ComponentModel;
    namespace Examples.SmptExamples.Async
    {
        public class SimpleAsynchronousExample
        {
     
            static bool mailSent = false;
            private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
            {
                // Get the unique identifier for this asynchronous operation.
                String token = (string)e.UserState;
                if (e.Cancelled)
                {
                    Console.WriteLine("[{0}] Send canceled.", token);
                }
                if (e.Error != null)
                {
                    Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
                }
                else
                {
                    Console.WriteLine("Message sent.");
                }
     
                mailSent = true;
            }
     
            public static void Main(string[] args)
            {
                string dest;
                string pj;
                dest = "...";
                pj= "...";
     
             if (args.Length <= 0)
               {
                    EnvoyerMail(ref dest, ref pj);
             }
     
            }
     
     
            public static void EnvoyerMail(ref string dest, ref string pj)
            {
           string chemin = @"..." ;
     
     
                SmtpClient client = new SmtpClient();
                client.Host = "...";
                client.Credentials = new NetworkCredential("...", "...");
     
     
                MailAddress from = new MailAddress("...",
                   "..." + (char)0x20 + " ...", System.Text.Encoding.UTF8);
                         MailAddress to = new MailAddress("...", dest);
     
                MailMessage message = new MailMessage(from, to);
     
                message.Body += "Ci-joint, ... ";
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.Subject = "Envoi Automatique d'une pièce jointe";
                message.SubjectEncoding = System.Text.Encoding.UTF8;
                message.Attachments.Add(new Attachment(chemin + pj));
                          client.SendCompleted += new
                SendCompletedEventHandler(SendCompletedCallback);
                          string userState = "test message1";
                client.SendAsync(message, userState);
                Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
                string answer = Console.ReadLine();
                           if (answer.StartsWith("c") && mailSent == false)
                {
                    client.SendAsyncCancel();
                }
                         message.Dispose();
                        }
        }
    }
    En vous remerciant d'avance, et en espérant résoudre ce facheux problème ^^

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Sur quelle ligne se produit l'erreur ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Je pense que l'erreur vient de cette ligne if (args.Length <= 0)
    J'ai aussi essayé if (args.Length < 0), mais rien y fait...
    Toujours cette erreur indexoutofrangeexception ... :/

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    (Ligne 40)

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Tu es sur que c'est cette ligne?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Eh bien je ne sais pas trop en faite. J'ai réecrit ce programme dans un nouveau projet, un supprimant cette fameuse ligne 40... et voilà que ça fonctionne... Je pense avoir oublié d'ajouter quelques références --'
    C'est pour cela que j'avais une erreur.
    Enfin, le principal est que ça fonctionne!
    En vous remerciant de votre intérêt pour mon problème,
    au revoir

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je ne vois pas trop comment cette ligne pourrait causer cette erreur
    Il faudrait savoir sur quelle ligne l'erreur est déclenchée. Tu exécutes le programme dans le débogueur ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Effectivement ce n'était pas cette ligne, comme je l'ai précisé ci-dessus c'était un souci de références... J'ai oublié d'en ajouter une :/
    A présent, le programme fonctionne.
    En revanche, si je peux me permettre une autre question...
    Mon programme réalisé, j'ai généré un .exe
    Je voudrais savoir, si c'est possible via un autre programme en C# d'appeler ce .exe et de lui "conférér" des variables. Ici, ce serait une ou des pièces jointes et un ou des destinataires.
    Je ne sais pas trop si c'est clair, donc je vous explique l'objectif..
    Je suis intérimaire dans une entreprise, et on me demande de créer un programme pour envoyer des mails "automatiques" ...
    Ce programme sera ajouté à un autre, c'est pour cela que je voudrais le "simplifier".
    Pour cela j'ai décidé de créer une autre application appelant mon .exe (crée auparavant), et de lui donner des paramêtres (pj et destinataire).
    Ainsi, les utilisateurs n'auront qu'à remplacer (facilement) le nom de leur pièce jointe ou de leur destinataire...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Plus concrètement,

    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
    using System.Diagnostics;
    class Program
    {
     
        static void Main(string[] args)
        {
                 ProcessStartInfo startInfo = new ProcessStartInfo();
           startInfo.CreateNoWindow = false;
           startInfo.UseShellExecute = false;
           startInfo.FileName = @"moncheminetmonappli.exe";
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
           Process exeProcess = Process.Start(startInfo);
           exeProcess.WaitForExit();
        }
    }

    Voici comment je lance mon .exe Et cela fonctionne
    Maintenant j'aimerais pouvoir y modifier mon destinataire et ma pièce jointe via ce bout de code... avez-vous une idée?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par mlkjhg Voir le message
    Effectivement ce n'était pas cette ligne, comme je l'ai précisé ci-dessus c'était un souci de références... J'ai oublié d'en ajouter une :/
    Ca n'a pas de sens... une référence manquante peut faire échouer la compilation, mais sûrement pas provoquer une IndexOutOfRangeException

    Citation Envoyé par mlkjhg Voir le message
    Pour cela j'ai décidé de créer une autre application appelant mon .exe (crée auparavant), et de lui donner des paramêtres (pj et destinataire).
    J'ai pas compris là... tu veux faire un exe dont le seul but sera de passer des paramètres à un autre exe ?
    Pourquoi ne pas passer directement les paramètres à l'exe final ?

  11. #11
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Tu peux utiliser
    ProcessStartInfo.Arguments et les récupérer dans ton programme cible.

    Par contre dans le main ca serait plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (args.Length >0)
               {
    [dest=arg[0];
    pj=arg[1];                EnvoyerMail(ref dest, ref pj);
             }
    Mais sinon je pense que ton problème d'origine n'est pas réglé... Si il manquait une reference tu n'aurais pas pus compiler!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Si ce n'est pas la référence, et que ce n'est pas cette ligne 40... alors je ne vois pas où était le pb, en tous cas j'ai réécrit ce code dans une nouvelle appli en supprimant la ligne 40 et en y ajoutant mes références et ça fonctionne. Etant réellement débutante j'ignore d'où venait le problème, mais il est résolu...
    Concernant ma seconde question, en effet j'y vois peu d'intérêt mais l'utilisateur souhaiterait avoir une unique ligne de commande où il y aurait le nom du .exe ainsi qu'en paramètre la pj et le destinataire, la raison? uniquement pour se simplifier la vie je suppose...

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/11/2011, 09h16
  2. problème index dans un tableau
    Par kek's dans le forum VB.NET
    Réponses: 18
    Dernier message: 11/06/2010, 17h31
  3. Problème d'écriture dans un tableau
    Par Hokagge dans le forum MFC
    Réponses: 46
    Dernier message: 08/07/2005, 16h47
  4. Problème de montage d'un tableau en HTML...
    Par David.V dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/02/2005, 08h38
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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