Problème en C - Espace dans un string utilisé avec system()

Section réservée pour tout ce qui n'entre pas dans les sections ci-dessus

Problème en C - Espace dans un string utilisé avec system()

Messagepar Xav92 » Sam Mai 19, 2012 12:57 pm

Salut tout le monde!
J'ai un petit soucis de programmation comme vous avez pu devinez :p Nos petit groupe doit créer une "vidéothèque" en C et celle-ci doit pouvoir lancer a l'aide d'une commande DOS les films enregistrés. Jusqu’à présent ça marche mais ya un pépin quand un dossier à un espace... J'ai trouvé qu'il y a moyen de se déplacer dans un string avec strchr et qu'on peut écrire avec sprintf mais ca ne resout pas grand chose =/

Mes questions:
-Je vois pas comment supprimer cet espace directement dans le string sans recourir a un tableau et une boucle qui trie chaque caractère séparément.
-Quel caractère peut remplacer l'espace pour que le system() le reconnaisse?

Code: Tout sélectionner
int main (int argc, char * argv[])
{
    char slash[5] = "\\";
    char avi[5] = ".avi";
    char repertoire[250] = "";
    char film[50] = "";

    printf("Film?\n");
    scanf("%s",film);

    // on trouve le repertoire actuel - a remplacer par le dossier film
    getcwd(repertoire, 250);

    // on concatene le repertoire, le slash, le film et son extension.
    strcat(repertoire,slash);
    strcat(film,avi);
    strcat(repertoire,film);

    // lancemement du film
    system(repertoire);
}



Merci d'avance,
Xav92
Dernière édition par Xav92 le Sam Mai 19, 2012 1:28 pm, édité 1 fois.
Avatar de l’utilisateur
Xav92
Égorgeur de Rats
 
Messages: 44
Inscription: Lun Juin 23, 2008 5:33 pm
Localisation: Waterloo, Belgique

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Gorkk » Sam Mai 19, 2012 1:20 pm

A priori si tu veux que ça soit interprété correctement avec des espaces dans le nom du chemin (ça peut être aussi dans le nom de fichier), ça devrait suffire de rajouter des double quotes dans la chaîne passée, donc probablement quelque chose comme
Code: Tout sélectionner
[...]
strcat(repertoire,film);
char chemin[1] = "\"";
strcat(chemin, repertoire);
strcat(chemin, "\"");

system(chemin);

Bon là c'est vraiment pas beau comme façon de faire hein bien sûr, y a très certainement mieux pour le faire, mais ça devrait marcher. Après bien sûr de toute façon a priori ton programme tournera que sous Windows (avec le \ comme séparateur, et le fait que sous Linux a priori plutôt que de mettre les double quotes il faudrait plutôt échapper l'espace avec un \). Mais bon le C j'en ai juste fait un peu il y a très très longtemps, et il m'en reste pas grand chose ;)
Gorkk
Administrateur
 
Messages: 8943
Inscription: Ven Avr 09, 2004 8:35 am

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Xav92 » Sam Mai 19, 2012 2:08 pm

Merci! J'essaye tout de suite!
...
Alors il me met maintenant que "la syntaxe de nom de fichier, de répertoire ou de volume est incorrecte." ^^ Le C je dois en faire pendant encore 3 semaines puis j'ai fini, on passe au Java l'année prochaine.
Avatar de l’utilisateur
Xav92
Égorgeur de Rats
 
Messages: 44
Inscription: Lun Juin 23, 2008 5:33 pm
Localisation: Waterloo, Belgique

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Gorkk » Sam Mai 19, 2012 4:57 pm

Xav92 a écrit:Merci! J'essaye tout de suite!
...
Alors il me met maintenant que "la syntaxe de nom de fichier, de répertoire ou de volume est incorrecte." ^^ Le C je dois en faire pendant encore 3 semaines puis j'ai fini, on passe au Java l'année prochaine.

Quelques questions à étudier :
  • Ton code avant, il marchait s'il n'y avait pas d'espace dans le nom de fichier ?
  • si tu affiches dans la console les variables "repertoire" et "chemin" telles qu'elles sont juste avant de les utiliser, ça sort quoi ? (passer avec le debugger et inspecter l'état des variables marche aussi ;))
Gorkk
Administrateur
 
Messages: 8943
Inscription: Ven Avr 09, 2004 8:35 am

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Xav92 » Dim Mai 20, 2012 8:52 am

J'ai trouvé l'erreur! Il y avait un char avait pas assez d'alloc =D Tout fonctionne maintenant! Un super merci à toi :D
Avatar de l’utilisateur
Xav92
Égorgeur de Rats
 
Messages: 44
Inscription: Lun Juin 23, 2008 5:33 pm
Localisation: Waterloo, Belgique

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Xav92 » Dim Mai 20, 2012 7:08 pm

Une dernière question ^_^
Ca fonctionnait avec le getcwd() mais mtn que je vais le chercher dans un fichier texte ca plante =/

Merci d'avance :)

Le code:
Code: Tout sélectionner
    char slash[DEFAULT_LENGTH] = "\\";
    char avi[DEFAULT_LENGTH] = ".avi"; //mettre un choix d'extension /!\
    char repertoire1[RACCOURCI_LENGTH] = "";
    char film[DEFAULT_LENGTH] = "";
    char repertoire[RACCOURCI_LENGTH] = "\"";
    int exist;

    printf ("Quel film lancer ? : \n\n");
    printf("Nom : ");
    scanf("%s",film);
    /*exist = checkFilmsIfExist(a, film);            /////////////////
    if (exist == -1)
    {
        printf("Film introuvable...\n");               Tout ceci vérifie l'existence du film dans une strucure.
    }
    else
    {*/                                                       ////////////////
    char repertoire1[RACCOURCI_LENGTH] = "";

    FILE* pathFilm = NULL;
    pathFilm = fopen("file/pathFilm.txt", "r");
    if (pathFilm != NULL)
    {
        fgets(repertoire1, RACCOURCI_LENGTH, pathFilm);
        printf("%s\n", repertoire1);
        fclose(pathFilm);
    }
    //getcwd(repertoire1, RACCOURCI_LENGTH); au cas ou...

    // on concatene le repertoire, le slash, le film et son extension.
    strcat(repertoire1,slash);
    strcat(film,avi);
    strcat(repertoire1,film);

    strcat(repertoire, repertoire1);
    strcat(repertoire, "\"");
    printf("%s\n", repertoire);
    system(repertoire);
    }


La console:
Code: Tout sélectionner
Quel film lancer ? :

Nom : ob5
D:\Video\Oblivion
"D:\Video\Oblivion\ob5.avi"
Le chemin d'accès spécifié est introuvable.

Process returned 1 (0x1)   execution time : 2.284 s
Press any key to continue.


Le contenu de mon fichier .txt:
D:\Video\Oblivion
Avatar de l’utilisateur
Xav92
Égorgeur de Rats
 
Messages: 44
Inscription: Lun Juin 23, 2008 5:33 pm
Localisation: Waterloo, Belgique

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Gorkk » Dim Mai 20, 2012 11:13 pm

Une question comme ça : ton programme la récupérait comment la lettre de lecteur dans la version précédente (en allant revoir le code, je vois pas) ?

Tu peux toujours essayer de doubler les "\" dans ton fichier avec le chemin pour voir si ça passe mieux.
Gorkk
Administrateur
 
Messages: 8943
Inscription: Ven Avr 09, 2004 8:35 am

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Xav92 » Dim Mai 20, 2012 11:25 pm

Il ne la récupérait pas :rouge: Et avec les double slash le résultat était même pas pris en compte =/ je regarde demain matin pour voir si ça marche en restant sur le même disque ^_^
Avatar de l’utilisateur
Xav92
Égorgeur de Rats
 
Messages: 44
Inscription: Lun Juin 23, 2008 5:33 pm
Localisation: Waterloo, Belgique

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Gorkk » Lun Mai 21, 2012 1:07 am

Donc le chemin que tu passais au final c'était quoi avant que tu prennes dans le fichier ? C'était un chemin relatif par rapport au répertoire courant ?
Gorkk
Administrateur
 
Messages: 8943
Inscription: Ven Avr 09, 2004 8:35 am

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Xav92 » Lun Mai 21, 2012 2:57 pm

C'est le chemin complet du dossier vidéo, et ca marche si on reste sur le même disque dur. On a du rendre le programme aujourd'hui et même si ce n’était pas du grand art, on a réussi a remplir 80% du cahier des charges =)

Encore un tout grand merci à toi pour ton aide! :fleurs:
Avatar de l’utilisateur
Xav92
Égorgeur de Rats
 
Messages: 44
Inscription: Lun Juin 23, 2008 5:33 pm
Localisation: Waterloo, Belgique

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Gorkk » Lun Mai 21, 2012 3:13 pm

De rien. Après c'est toujours intéressant de chercher comment ça se ferait pour gérer des ressources sur un autre disque (c'est probablement pas si compliqué que ça a priori).
Gorkk
Administrateur
 
Messages: 8943
Inscription: Ven Avr 09, 2004 8:35 am

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar Xav92 » Lun Mai 21, 2012 3:27 pm

Je pense continuer ce projet pendant les vacances quand j'aurai fini mes exams. Et je vais utiliser plus de fichier binaires et faire une sauvegarde plus progressive des données. Je met tout ca dans une note du cahier de charge et je reprends dans 4 semaines =)
Avatar de l’utilisateur
Xav92
Égorgeur de Rats
 
Messages: 44
Inscription: Lun Juin 23, 2008 5:33 pm
Localisation: Waterloo, Belgique

Re: Problème en C - Espace dans un string utilisé avec syste

Messagepar AdrienR23 » Dim Sep 22, 2019 2:02 pm

Xav92 a écrit:Merci! J'essaye tout de suite!
...
Alors il me met maintenant que "la syntaxe de nom de fichier, de répertoire ou de volume est incorrecte vitrerie Lausanne dépannage." ^^ Le C je dois en faire pendant encore 3 semaines puis j'ai fini, on passe au Java l'année prochaine.

Et bien, je vois que tout s'accélère avec nous. En tout cas, j'ai hâte de voir les nouvelles mises à jour.
AdrienR23
Chasseur de Rats
 
Messages: 1
Inscription: Dim Sep 22, 2019 1:56 pm


Retourner vers Le comptoir de la taverne

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 17 invités

cron