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 :

Exception + lancement de commande shell


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut Exception + lancement de commande shell
    Bonjour,

    J'ai pas tout tout compris aux exceptions. Voici ce que fait une de mes méthodes :

    scan = Process.Start(@"C:\scanSA.bat", mail + " " + pathFile + " " + pathReport);
    scan.WaitForExit();

    ça marche, mais voilà, je voudrais que si jamais le fichier n'existe pas (la variable 'mail') et que donc le shell mette un truc du genre "le fichier spécifié est introuvable", et bien qu'une exception soit levée. ça sert bien à ça une exception ??
    et au final et bien que ma méthode me retourne true ou false.

    j'ai donc voulu mettre mon code ci dessus dans un bloc try {} et puis après, le catch... j'ai essayé plein de choses (déjà je sais meme pas quel type d' Exception je dois mettre) mais que le fichier existe ou pas, le programme passe toujours dans le bloc try (dans lequel j'ai mis un return true)

    voili voilou... j'espere que je suis a peu près clair... a peu près lol

    merci d'avance

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par remsrock Voir le message
    ça marche, mais voilà, je voudrais que si jamais le fichier n'existe pas (la variable 'mail') et que donc le shell mette un truc du genre "le fichier spécifié est introuvable", et bien qu'une exception soit levée. ça sert bien à ça une exception ??
    Salut,
    ça sert à ça. On peut imaginer que ta méthode lève une exception lorsque le fichier n'existe pas : tu pourrais donc avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void f()
    {
      if (!File.Exists(mail))
        throw new System.IO.FileNotFoundException("le fichier n'existe pas !");
      scan = Process.Start(@"C:\scanSA.bat", mail + " " + pathFile + " " + pathReport);
      scan.WaitForExit();
    }
    Et plus haut dans ton code, dans les méthodes qui appellent cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void g()
    {
    ...
    try
    {
      f();
    }
    catch (System.IO.FileNotFoundException ex)
    {
      // code qui s'exécute lorsque f a lancé l'exception
    }
    Les exceptions sont couramment utilisées en C++, C#, Java entre autres, je t'invite à lire un bon tuto sur le sujet.

    PS : appeler un fichier .bat dans un programme C# est douteux. regarde si tu peux pas traduire et intégrer le contenu de ce batch dans ton code C#...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut
    Merci de ta réponse, je vois déjà mieux là !

    par contre, pour éviter alors le fichier bat, je pourrais "copier" la commande shell que je fais. mais je n'ai pas trouvé comment on fait, j'ai juste trouvé comment lancer un fichier. car en fait, dans mon .bat, y'a juste une ligne (analyse de SpamAssassin).
    ... donc comment faire ?

    aussi, j'ai des difficultés pour indiquer des chemins, justement exemple : !File.Exists(mail)
    comment indiquer exactement l'endroit où se trouve 'mail' ?

    merci

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Facile : on lance un fichier exe comme on lance un fichier bat, avec Process.Start Regarde la doc de Process : http://msdn.microsoft.com/fr-fr/libr...ss(VS.80).aspx

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut
    alors du coup, j'essaye de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ProcessStartInfo processInfo = new ProcessStartInfo(@"C:\SpamAssassin\spamassassin.exe");
    processInfo.Arguments = " -D" + " < " + pathFile + mail + " > " + pathReport + mail + ".txt";
     
    Process SAProcess = Process.Start(processInfo);
    SAProcess.WaitForExit();
    mes variables path sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private string pathFile = @"C:\MyWebServices\First\Spam_Files\";
    private string pathReport = @"C:\MyWebServices\First\";
    mais lors du lancement de shell, il dit qu'il n'aime pas les arguments... (le " < "). Je m'y prends sans doute mal, mais je vois pas trop là...

    petite indication quand meme, le lancement de spam assassin se fait par exemple comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    spamassassin.exe -D < "c:\monDossier\test1.htm" > "c:\monDossier\results-test1.htm.txt"

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    < et >, ce sont les Input Output d'un programme en ligne de commande.

    Donc, solution : utiliser les propriétés StandardInput et StandardOutput de la classe process.

Discussions similaires

  1. [Débutant] Problème lancement Acrobat en ligne de commande (shell)
    Par stonnelier dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/01/2015, 15h42
  2. lancement de commande shell en C#
    Par broule dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 30/07/2009, 11h28
  3. Réponses: 4
    Dernier message: 03/10/2008, 15h03
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12

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