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

GTK+ avec C & C++ Discussion :

g_spawn_command_line_async() ne fonctionne pas..


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut g_spawn_command_line_async() ne fonctionne pas..
    Bonjour,

    J'utilise assez fréquemment g_spawn_command_line_async() et g_spawn_command_line_sync(), et sans trop de problème. Mais aujourd'hui - et pour un truc en apparence tout bête - je tombe sur un os.. Je veux - par exemple - juste détruire un fichier sous Windows (DOS, commande "del").

    J'ai un bout de code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int flag;
    char tempo[100]="nom du fichier", tempo2[100];
    (void)sprintf(tempo2,"del %s",tempo);
    flag=g_spawn_command_line_async(tempo2,NULL);
    (void)printf("%s (%d)\n",tempo2,flag);
    Ca ne marche pas, et le flag reste à zéro (erreur).

    J'ai essayé de travailler sur les guillemets (le nom du fichier contient des espaces), avec, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo2,"\"del %s\"",tempo);
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo2,"del \"%s\"",tempo);
    etc. Le flag reste définitivement à zéro (erreur) et l'instruction n'est pas exécutée. Alors qu'elle s'exécute bien si je la lance "à la main" "en direct".

    J'ai l'impression qu'il s'agit d'une bête étourderie de ma part (j'arrive à faire fonctionner cette affaire dans des cas bien plus alambiqués), mais j'ai beau chercher, je ne trouve pas.

    Une idée?

    Merci d'avance pour toute aide sur ce point.

    Cordialement, Eric.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Utilises le deuxième argument de la fonction gboolean g_spawn_command_line_async (const gchar *command_line, GError **error); pour afficher le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    GError *error = NULL;
     
    if (!(flag=g_spawn_command_line_async(tempo2, &error)))
    {
      g_printerr ("%s\n", error->message);
      g_error_free (error);
      error = NULL;
    }

  3. #3
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Merci gerald3d,

    J’obtiens le message d'erreur suivant :
    L'exécution du processus fils a échoué (No such file or directory)
    Et ca dans tous les essais que je fais. Pourtant :

    1) Le fichier existe bien, et
    2) Si je lance la commande del "à la main", "en direct" sur une console, elle fonctionne très bien, prouvant qu'il n'y a pas d'erreur de syntaxe (ou autre).

    Je n'ai aucune idée d'où vient ce problème. Je soupconne que c'est lié à la présence d'espace dans le nom du fichier..

    Si quelqu'un a une idée.

    Encore merci pour toute aide sur ce point.

    Cordialement, Eric.

  4. #4
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Je continues ma réponse :

    Encore plus énigmatique !

    Si - au lieu de lancer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_spawn_command_line_async(tempo2,NULL);
    Je lance :
    Là tout marche bien. La syntaxe incluse dans char *tempo2 est donc correcte !

    Quelqu'un aurait-il une idée de pourquoi g_spawn_command_line_async() ne s'en sort pas ici, alors que system() fonctionne correctement ?

    D'avance merci pour tout éclaircissement sur ce point.

    Eric.

  5. #5
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    (re)bonjour,

    Bon, pour une raison et dans un contexte complètement différent (et dans un cas sensiblement plus compliqué) je viens de retomber sur exactement le même problème que celui que j'ai décrit dans ce post. g_spawn_command_line_async() n'abouti pas, alors que la commande taper "à la main en directe" fonctionne très bien. Cette fois-ci, je ne peux pas m'en sortir avec la fonction system().

    A présent, je suis vraiment planté, et je sollicite ici toute aide charitable qui pourrait me donner une piste.

    Je précise dans dans la chaine qui est envoyée à g_spawn_command_line_async(), il y a des anti-slash "\". Se pourrait-il que ce soit ceci la source de mes problèmes ? Devrais-je doubler tous les anti-slashs ? Se pourrait-il notamment que system() interprète correctement les anti-slashs alors que g_spawn_command_line_async() aurait des difficultés à cet endroit ?

    D'avance merci.

    Eric.

  6. #6
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 329
    Points : 606
    Points
    606
    Par défaut
    Ma suggestion est un peu gratuite car je n'ai jamais utilisé les fonction g_spawn_..., en question, mais toutes se ramènent à l'appel de g_spawn_async_with_pipes() qui selon la doc possède un argument "flags" dont l'une des options est:
    G_SPAWN_SEARCH_PATH argv[0] need not be an absolute path, it will be looked for in the user's PATH.
    Tu peux peut-être explorer cette voie en appelant directement g_spawn_async_with_pipes()
    GraceGTK: a plotting tool at https://sourceforge.net/projects/gracegtk

  7. #7
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par pvincent Voir le message
    Ma suggestion est un peu gratuite car je n'ai jamais utilisé les fonction g_spawn_..., en question, mais toutes se ramènent à l'appel de g_spawn_async_with_pipes() qui selon la doc possède un argument "flags" dont l'une des options est:

    Tu peux peut-être explorer cette voie en appelant directement g_spawn_async_with_pipes()
    Merci,

    J'utilise déjà un absolute path (et c'est d'ailleurs pour cela que j'ai des anti-slash dans le nom du fichier).

    Je vais explorer ça encore prochainement, et vous tiens au courant si je trouve quelque chose.

    Encore merci, Eric.

  8. #8
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Je ne comprends pas pourquoi pour effacer un fichier tu fait un fork() ???

    Alors que les fonctions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int remove(const char *filename)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int unlink (const char *filename)
    de la libc font l'affaire, ou simplement puisque tu utilise la GLib la fonction:

    g_remove()

    ???
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  9. #9
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    Je ne comprends pas pourquoi pour effacer un fichier tu fait un fork() ???
    Merci pour votre réponse. Comme je l'ai dit, l'idée d'effacer un fichier n'était juste qu'un exemple. Je fais en fait de nombreuses choses avec g_spawn_command_line_async() et g_spawn_command_line_sync(). Le problème auquel je suis confronté et dont je parle ici - qui je pense est lié à la gestion des chaines de characters - n'est toujours pas résolu. Je vais tâcher de débloquer du temps là-dessus pour m'y remettre la semaine prochaine.

    Eric.

  10. #10
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    N'utilise pas directement NULL mais &error dans g_spawn_command_line_async(tempo2,NULL); gerald3d t'as donnée un exemple. Utilises le

    Citation Envoyé par eric1708
    J'ai essayé de travailler sur les guillemets (le nom du fichier contient des espaces)
    Citation Envoyé par eric1708
    Je soupconne que c'est lié à la présence d'espace dans le nom du fichier..
    Citation Envoyé par eric1708
    il y a des anti-slash "\". Se pourrait-il que ce soit ceci la source de mes problèmes ?
    Donner un diagnostique sans voir le malade, c'est pas évident. T'as pas un échantillon ?
    Tu ne préfères plutôt pas essayer avec un chemin simple pour commencer?.?.?. Utilise G_DIR_SEPARATOR_s et g_build_path.

    Bien à toi,

  11. #11
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par Gaulouis Voir le message
    N'utilise pas directement NULL mais &error dans g_spawn_command_line_async(tempo2,NULL); gerald3d t'as donnée un exemple. Utilises le
    Merci,

    Comme je l'ai déjà dit ci-dessus, j'ai effectivement utilisé le second argument de g_spawn_command_line_async() (et je fais également état ci-dessus des messages que je reçois). C'est ceci qui me donne l'idée que les noms de fichiers sont la source des erreurs dont je parle.

    Citation Envoyé par Gaulouis Voir le message
    Donner un diagnostique sans voir le malade, c'est pas évident. T'as pas un échantillon ?
    Comme je l'ai dit également ci-dessous, je vais bosser là-dessus cette semaine. Je vais tâcher de tirer ceci au clair.

    Citation Envoyé par Gaulouis Voir le message
    Tu ne préfères plutôt pas essayer avec un chemin simple pour commencer?.?.?. Utilise G_DIR_SEPARATOR_s et g_build_path.
    A priori, excellent commentaire ! Oui mais voilà : les chemins et noms de fichiers que je dois argumenter ne sont pas mon fait. Ce sont ceux fournis par gtk_file_selection_get_filename(). Il faut faire avec..

    Je vous tiens au courant,

    Eric.

  12. #12
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Bon, j'ai beau chercher dans tous les sens, impossible de faire fonctionner g_spawn_command_line_async().

    J'ai donc créé un code minimal qui reproduit le problème. Ce code demande à l'utilisateur un nom de fichier (via un gtk_file_selection), et détruit ce fichier via un g_spawn_command_line_async(). Impossible de faire fonctionner ceci. Le code est ci-dessous. Je suis sous Windows (instruction "del"), et les noms de fichier possèdent des blancs et des anti-slash, et je suis sûr que le problème vient de là.

    Je (re)précise que j'ai à faire des choses plus compliqués que juste détruire un fichier. Cette histoire de destuction de fichier n'est qu'un exemple bidon. Ici, le message d'erreur indique "No such file or directory" alors que le fichier existe bien, puisque - entre autre - il provient du gtk_file_selection.

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <strings.h>
    #include <gtk/gtk.h>
     
    const gchar *nom_fichier;
     
    int main(int argc, char **argv)
    {
        /* déclaration du widget */
        GtkWidget *file_selection;
        /* déclaration des fonctions call back */
        void OnDestroy(GtkWidget *pWidget, gpointer pData); /* fonction call back destroy */
        void recuperer_chemin(GtkWidget *bouton, GtkWidget *file_selection); /* fonction call back file selection */
        void suite(GtkWidget *bouton, GtkWidget *file_selection); /* fonction call back après récup chemin */
     
        /* Initialisation de GTK+ */
        gtk_init(&argc, &argv);
        /* creation du file_selection*/
        file_selection=gtk_file_selection_new("choix fichier");
        /* on interdit la possibilité de selection plusieurs fichiers */
        gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(file_selection), FALSE);
        /* on vire les boutons de création de directory, deletion, rename, etc.. */
        gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(file_selection));
        /* on centre la fenetre sur l'écran */
        gtk_window_set_position(GTK_WINDOW(file_selection), GTK_WIN_POS_CENTER);
        /* Connexion des signaux */
        g_signal_connect(GTK_FILE_SELECTION(file_selection)->ok_button, "clicked", G_CALLBACK(recuperer_chemin), file_selection); /* recup nom fichier */
        g_signal_connect(GTK_FILE_SELECTION(file_selection)->ok_button, "clicked", G_CALLBACK(suite), file_selection);
        g_signal_connect(G_OBJECT(file_selection), "delete-event", G_CALLBACK(OnDestroy), NULL);
        g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(file_selection)->cancel_button), "clicked", G_CALLBACK(OnDestroy), file_selection);
        /* affichage du sélecteur de fichier */
        gtk_widget_show(file_selection);
        /* Demarrage de la boucle evenementielle */
        gtk_main();
        return EXIT_SUCCESS;
    }
     
     
    void OnDestroy(GtkWidget *pWidget, gpointer pData)
    {
        /* Arret de la boucle evenementielle */
        gtk_main_quit();
        return;
    }
     
     
    void recuperer_chemin(GtkWidget *bouton, GtkWidget *file_selection)
    {
        /* recupération du nom du fichier */
        nom_fichier=gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_selection));
        return;
    }
     
     
    void suite(GtkWidget *bouton, GtkWidget *file_selection)
    {
        /* suite après que le nom du fichier ait été récupérer */
        char tempo[2000];
        GError *error = NULL;
        gboolean flag;
     
        (void)sprintf(tempo,"del \"\%s\"",nom_fichier);
        (void)printf("%s\n",tempo);
        flag=g_spawn_command_line_async(tempo, &error);
        if(!flag)
        {
            g_printerr("%s\n", error->message);
            g_error_free(error);
            error = NULL;
        }
        gtk_widget_destroy(file_selection);
        gtk_main_quit();
        return;
    }
    Je suis vraiment à cours d'idée à présent, et toute aide sur ce point est (plus que) bienvenue.

    D'avance merci,

    Eric.

  13. #13
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Ton code exemple semble correcte. Je ne peux pas l'essayer d'où ma supposition à sa simple lecture.

    Ceci dit, la commande "del" ne demande-t-elle pas une confirmation ? Si oui j'ai trouvé ceci : "echo o | del *.*". Tu remplaces les *.* par le nom de fichier de ton souhait.

    Pour finir, il y a des recommandations lorsqu'on utilises cette fonction (et les dérivées) sous windows :
    On Windows, please note the implications of g_shell_parse_argv() parsing command_line . Parsing is done according to Unix shell rules, not Windows command interpreter rules. Space is a separator, and backslashes are special. Thus you cannot simply pass a command_line containing canonical Windows paths, like "c:\program files\app\app.exe", as the backslashes will be eaten, and the space will act as a separator. You need to enclose such paths with single quotes, like "'c:\program files\app\app.exe' 'e:\folder\argument.txt'".
    En rouge une information importante. Ton problème principal vient peut être de là...

  14. #14
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut no such file or directory
    A tout hasard, l'erreur ne proviendrai pas de : (void)sprintf(tempo,"del \"\%s\"",nom_fichier);

    Que te retourne void)printf("%s\n",tempo); ?

  15. #15
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Ton code exemple semble correcte. Je ne peux pas l'essayer d'où ma supposition à sa simple lecture.

    Ceci dit, la commande "del" ne demande-t-elle pas une confirmation ? Si oui j'ai trouvé ceci : "echo o | del *.*". Tu remplaces les *.* par le nom de fichier de ton souhait.

    Pour finir, il y a des recommandations lorsqu'on utilises cette fonction (et les dérivées) sous windows :

    En rouge une information importante. Ton problème principal vient peut être de là...
    Merci gerald3d. Je réponds rapidement :

    1) Non, pas de confirmation à la commande del. J'ai testé. Par ailleurs, si je passe cette même chaine *tempo à system(), là tout marche correctement.

    2) Je me répète, j'ai le même problème avec d'autres instructions (que del) que je lance comme ça, et qui - non plus - ne demande pas de confirmation.

    3) Oui, j'ai aussi essayé - entre autre - le rajout de quote ('). Par exemple, en remplaçant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo,"del \"\%s\"",nom_fichier);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      (void)sprintf(tempo,"\'del\' \'\%s\'",nom_fichier);
    Le problème reste le même..

    Je suis toujours planté.. D'autres idées ?

    Merci en tout cas pour votre temps !

    Eric.

  16. #16
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par Gaulouis Voir le message
    A tout hasard, l'erreur ne proviendrai pas de : (void)sprintf(tempo,"del \"\%s\"",nom_fichier);

    Que te retourne void)printf("%s\n",tempo); ?
    Oui, le slash était en trop. Désolé. Je l'ai retiré (mais le problème reste le même).

    La commande est à présent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (void)sprintf(tempo,"del \"%s\"",nom_fichier);
    Et la sortie du printf est dans ce cas, par exemple :

    del "D:\calcul C\essai gkt\essai gtk\selection fichier\nom de mon fichier". Encore une fois, c'est l'interprétation de cette chaine par g_spawn_command_line_async() qui semble poser problème..

    Merci pour toute aide sur ce point.

    Cordialement, Eric.

  17. #17
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Tu n'as pas du bien regarder le commentaire. Il faut encadrer le chemin et le nom du fichier de simples guillemets. Au final tu dois transmettre à g_spawn_command_line_async(); un texte comme ca :

    "del 'D:\calcul C\essai gkt\essai gtk\selection fichier\nom de mon fichier'"
    Je t'ai mis en gras et en rouge les simples guillemets.

    Je réitère ma proposition d'essayer .

  18. #18
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par eric1708 Voir le message
    del "D:\calcul C\essai gkt\essai gtk\selection fichier\nom de mon fichier"
    Le forum est super puissant

  19. #19
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Tu n'as pas du bien regarder le commentaire. Il faut encadrer le chemin et le nom du fichier de simples guillemets. Au final tu dois transmettre à g_spawn_command_line_async(); un texte comme ca :


    Je t'ai mis en gras et en rouge les simples guillemets.

    Je réitère ma proposition d'essayer .
    Le commentaire en question donne la syntaxe suivante :

    'ma commande' 'mon fichier'ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo,"'\'del\' \'%s\'",nom_fichier);
    Et qui ne fonctionne pas.

    Si j'utilise la syntaxe que vous proposez, sans les guillemets autour de l'instruction "del" avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo,"del \'%s\'",nom_fichier);
    Ca ne fonctionne pas non plus..

    Dans les deux cas g_spawn_command_line_async() renvoie un boolean à zéro signant une erreur.

    Eric.

  20. #20
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    lol T'as le don ^^

    Et comme ça peut - être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void)sprintf(tempo,"del '%s'", nom_fichier);
    Et l'on obtiendrai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    del 'D:\calcul C\essai gkt\essai gtk\selection fichier\nom de mon fichier'

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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