Bonjour,
Après de nombreux essais, j'ai enfin trouvé la solution.
Il m'a fallu doubler tous les anti-slash (je me suis écrit un fonction C pour cela). Mais ça aurait été trop simple.. Il faut aussi que les chaines en question ne se terminent pas par un anti-slash, doublé ou non. Il m'a fallu les virer.
Pourquoi faire simple quand on peut faire compliqué... Pfffff!
Ceci termine donc cette histoire qui a duré. Je passe le post en "résolu", et je remercies tout le monde ici pour l'aide précieuse.
Cordialement, Eric.
Salut,
pour éviter de t'enquiquiner à créer des chemins, regarde g_build_path et g_build_filename ! Et en plus c'est portable
Documentation officielle GTK+ 3:
GTK en C, GTK en Python
Tutoriels GTK+ 3:
GTK en C, GTK en Python
Tutoriels par l'exemple (platform-demos):
GTK (tous langages)
Merci, mais deux choses cependant :
1) Les noms et chemins que je dois argumenter ne sont pas mon fait. Ils proviennent de gtk_file_selection_get_filename(). Ils devraient déjà avoir la syntaxe qui convienne, et g_build_path() ne fera que répéter ceci. Or ce n'est apparement pas la syntaxe qui convient pour appeler correctement un exécutable avec arguments par g_spawn_command_line_async().
2) La doc de g_build_path(), par exemple, dit clairement "At the boundary between two elements, any trailing occurrences of separator in the first element, or leading occurrences of separator in the second element are removed and exactly one copy of the separator is inserted." Or, dans le cas sur lequel j'ai planché, il faut justement - au contraire - deux éléments (i.e., deux anti-slashs) à chaque fois.
Mais merci pour l'info en tout cas,
Cordialement,
Eric.
Bonjour a tous,
En parlant de doc, la documentation de g_spawn_command_line_async nous dis quelques chose d’intéressant :
On dirai que l'erreur vient de g_shell_parse_argv.A simple version of g_spawn_async() that parses a command line with g_shell_parse_argv() and passes it to g_spawn_async(). Runs a command line in the background. Unlike g_spawn_async(), the G_SPAWN_SEARCH_PATH flag is enabled, other flags are not. Note that G_SPAWN_SEARCH_PATH can have security implications, so consider using g_spawn_async() directly if appropriate. Possible errors are those from g_shell_parse_argv() and g_spawn_async().
The same concerns on Windows apply as for g_spawn_command_line_sync().
Puisque l'argument de la ligne de commande provient de GtkFileChooser (pas d'injection): Pas besoin d'utiliser g_spawn_command_line_async un simple g_spawn_async suffit.
En espérant aider,
le prototype de g_spawn_async() est quelque peu effarant de complexité. Voici un exemple avec l'équivalent de g_spawn_command_line_async
PS: Merci d'avoir soulevé se problème.
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 { GError *error = NULL; gboolean retval; gchar *argv[3]; argv[0] = "del"; argv[1] = nom_fichier; argv[2] = NULL; retval = g_spawn_async (NULL,// ici tu peu changer le répertoire de travail argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error); if ( ! retval ) { g_warning ("%s", error->message); } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager