Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Mac
Mac Avant de poster: Lire La FAQ Mac; Voir la page Outils; Voir les tutoriels.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/07/2007, 13h26   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
Par défaut parcourir disque dur sous Mac

bonjour a tous;
je suis debutant dans le C; j'ai fait une petite application qui ouvre un dossier le lit et affiche les photo qui se touve dedans avec SDL; ce dossier se trouve au meme niveau que mon appli. mainteant jaimerais que mon appli demande a l'utilisateur de parcourir son disque dur et de choisir le dossier quil veut lire.. on ma conseille l'api win32.. Mais je suis sur Mac et je compile avec Xcode. si quelqu'un sait comment faire merci par avance
hubeert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 13h36   #2
Rédacteur
 
Avatar de Franck.H
 
Franck HECHT
Inscription : janvier 2004
Messages : 5 575
Détails du profil
Informations personnelles :
Nom : Franck HECHT
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 5 575
Points : 6 991
Points : 6 991
Envoyer un message via MSN à Franck.H
Salut et bienvenue sur les forums de developpez.com


Moi perso j'aurais plutôt utilisé la bibliothèque GTK+, que ce soit pour l'affichage des images que pour l'interface graphique, tout est prévue là dedans, fenêtres, boîtes de dialogues etc....
__________________
Mon Site
Groupe social des amateurs du langage C
Ma bibliothèque de gestion de chaînes de caractères : CStr


"L'imagination est plus importante que le savoir" A. Einstein
Franck.H est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 17h39   #3
Membre Expert
 
Avatar de Ceylo
 
Étudiant
Inscription : janvier 2007
Messages : 1 196
Détails du profil
Informations personnelles :
Âge : 21
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 1 196
Points : 1 310
Points : 1 310
Sur le site du Zér0 tu as écrit ce code (Spootnik = Soltic Lucas) :

Code C :
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
83
84
85
86
87
88
89
90
91
#include <stdlib.h> /* alors voici ma logique mais jene sais pas si elle est bonne */
#include <stdio.h>
#include <SDL/SDL.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
 
 
void pause(int nombrePhoto);
void chargePhoto(int numeroPhoto);
 
int nombrePhoto = 8; /* longueur du tableau */
char  *tableauPhoto[8] = {""};/* ={0}; //={"soleil.bmp","coucher.bmp","devant-maison.bmp","fleur.bmp","001.bmp"}; */
int i = 0, j = 0;
char repertoire[] = "nantes-bmp/";
char maPhoto[20] = "";
 
int main(int argc, char *argv[])
{
    struct dirent *lecture;
    DIR *rep;
    rep = opendir("nantes-bmp");
    while ((lecture = readdir(rep))) {
        if (++i > 4)
            j++;
 
        tableauPhoto[j] = lecture->d_name;
    }
 
    closedir(rep);
    nombrePhoto = j+1;
    // printf(" %ld \n", nombrePhoto);
 
    chargePhoto(0);
    pause(nombrePhoto);
    SDL_Quit();   
    return EXIT_SUCCESS;
}
 
void chargePhoto(int numeroPhoto)
{
    SDL_Surface *ecran = NULL, *imageDeFond = NULL;
    int width, height;
    SDL_Rect positionFond;
    positionFond.x = 0;
    positionFond.y = 0;
    SDL_Init(SDL_INIT_VIDEO);
    /* maphoto = "fleur.bmp";
     * la je veux concatener repertoire avec les valeur qui sont dans tableauPhoto
     * imageDeFond = SDL_LoadBMP("nantes-bmp/003.bmp"); //tableauPhoto[numeroPhoto]); */
    width  = imageDeFond->w;
    height = imageDeFond->h;
 
    ecran = SDL_SetVideoMode(width, height, 32, SDL_HWSURFACE);
    SDL_WM_SetCaption("nantes-bmp/003.bmp", NULL);/* tableauPhoto[numeroPhoto], NULL); */
                                                 /* Chargement d'une image Bitmap dans une surface */
 
        /* On blitte par-dessus l'ecran */
    SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
    SDL_Flip(ecran);
    SDL_FreeSurface(imageDeFond); /* On libere la surface */
 }
 
void pause(int nombrePhoto)
{
    int continuer = 1;
    int increment=0;
    SDL_Event event;
    while (continuer) {
        SDL_WaitEvent(&event);
        switch(event.type) {
            case SDL_QUIT:
                continuer = 0;
                break;
 
            case SDL_KEYDOWN: // Si appui d'une touche 
                switch(event.key.keysym.sym) {
                    case SDLK_RIGHT:  // Fleche droite
                        if (increment < (nombrePhoto - 1))
                            chargePhoto(++increment);
                        break;
 
                    case SDLK_LEFT:  // Fleche droite
                        if (increment > 0)
                            chargePhoto(--increment);
                        break;
 
                }
        }
    }
}

C'est cette ligne en particulier qui doit être modifiée afin de pouvoir accéder à n'importe quel répertoire du disque dur :
Code C :
rep = opendir("nantes-bmp");

L'adresse correspond à "./nantes-bmp".
"../nantes-bmp" va chercher le répertoire 'nantes-bmp' dans le répertoire parent.
Et enfin "/nantes-bmp" te permet d'accéder au répertoire 'nantes-bmp' s'il est situé directement à la racine de ton disque dur. L'intérêt est justement là : utiliser / pour accéder au répertoire racine et donc à partir de là à tout ton disque dur.

Pour commencer, tu peux demander l'adresse du dossier que l'utilisateur veut parcourir et la passer à opendir().

Une fois que tu as réussi à faire ça, tu peux essayer d'afficher tous les fichiers du répertoire racine /. À partir de là, tu affiches les dossiers (avec un signe indiquant que c'est bien un dossier) et les autres fichiers. Tu demandes à l'utilisateur s'il veut se servir du dossier dont tu viens d'afficher le contenu ou s'il veut choisir un autre sous-dossier (il faudrait aussi laisser la possibilité de revenir sur le répertoire parent).

Pour ça tu as besoin de lire le contenu d'un dossier (tu l'as fait dans ton code), mais tu dois aussi apprendre à reconnaître si une adresse correspond à un fichier ou à un répertoire. Pour ça tu peux te servir de stat() de cette façon :

Code C :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#include <sys/stat.h>
#include <stdio.h>
 
int isDir(char const *filename) {
    struct stat tampon;
 
    if (stat(filename, &tampon)) {
        printf("Probleme avec stat§)\n");
        return -1; /* signal d'erreur */
    }
 
    if (S_ISDIR(tampon.st_mode))
        return 1; /* on a bien affaire a un repertoire */
    else
        return 0; /* l'adresse ne correspond pas a un repertoire */
}
__________________
Cherche un(e ) développeur/se pour la version Windows et/ou Linux de sfeMovie! Puis pour aider sur le noyau une fois les portages au point
Blog à ne SURTOUT PAS visiter :p
Ceylo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 20h10   #4
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
merci a toi..

ce que je comprend pas c'est comment (ou plutot que je ne sais pas faire) c'est comment demander a l'utilisateur qu'elle adresse il veut ouvrir.;

"Pour commencer, tu peux demander l'adresse du dossier que l'utilisateur veut parcourir et la passer à opendir()."

c'est bien ca que je veux faire en passant par un menu ou en ouvrant le browser a l'ouverture de l'appli ; un peu dans le style photophop ( ou autre appli) lorsque tu cliques sur "ouvrir" et que sur mac ou un autre O.S tu peux choisir un dossier.. pour repondre a Franck.H (merci de ton message de bienvenue) j'ai aucune idée de ce qu'est la bibliotheque GTK+..
merci bien sur
hubeert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 20h17   #5
Rédacteur
 
Avatar de Franck.H
 
Franck HECHT
Inscription : janvier 2004
Messages : 5 575
Détails du profil
Informations personnelles :
Nom : Franck HECHT
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 5 575
Points : 6 991
Points : 6 991
Envoyer un message via MSN à Franck.H
Faire ce que tu veux avec SDL risque d'être assez ardu du fait que la plupart des bibliothèques additionnelles pour SDL qui permettent de faire de la GUI sont en C++ donc inutilisable en C.

GTK+ c'est la bibliothèque graphique utilisée par The Gimp et GNOME ainsi que bien d'autres programmes. Tu peux trouver des renseignements et des tutos, cours ici: http://gtk.developpez.com/

Pour savoir ce qu'est précisément GTK+: http://gtk.developpez.com/faq/?page=...ENERALITES_gtk
__________________
Mon Site
Groupe social des amateurs du langage C
Ma bibliothèque de gestion de chaînes de caractères : CStr


"L'imagination est plus importante que le savoir" A. Einstein
Franck.H est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 20h53   #6
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
merci de tes indications ; je vais lire ca.. ..
hubeert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 22h48   #7
Membre Expert
 
Avatar de Ceylo
 
Étudiant
Inscription : janvier 2007
Messages : 1 196
Détails du profil
Informations personnelles :
Âge : 21
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 1 196
Points : 1 310
Points : 1 310
Citation:
Envoyé par hubeert
merci a toi..

ce que je comprend pas c'est comment (ou plutot que je ne sais pas faire) c'est comment demander a l'utilisateur qu'elle adresse il veut ouvrir.;

"Pour commencer, tu peux demander l'adresse du dossier que l'utilisateur veut parcourir et la passer à opendir()."

c'est bien ca que je veux faire en passant par un menu ou en ouvrant le browser a l'ouverture de l'appli ; un peu dans le style photophop ( ou autre appli) lorsque tu cliques sur "ouvrir" et que sur mac ou un autre O.S tu peux choisir un dossier.. pour repondre a Franck.H (merci de ton message de bienvenue) j'ai aucune idée de ce qu'est la bibliotheque GTK+..
merci bien sur
Dans un premier temps, si tu veux et peux utiliser l'objective-C, sers toi de Cocoa et la classe NSOpenPanel en particulier.

Code objective-C :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#import <Cocoa/Cocoa.h>

char const *demanderAdresse(void) {
    char const *adresse = NULL;
    
    NSOpenPanel *panneau = [NSOpenPanel openPanel];
    if (panneau != nil) {
        [panneau setAllowsMultipleSelection:NO];
        [panneau setCanChooseDirectories:YES];
        [panneau setCanChooseFiles:NO];

        int resultat = [panneau runModal];
        if (resultat == NSOKButton)
            adresse = [[panneau filename] cString];
    }
    
    return adresse;
}

Si tu veux rester en C, pour tes tests tu peux rester avec la bonne vieille console grâce à fgets().

Sinon oui tu devrais regarder du côté de GTK+. SDL est parfait mais uniquement pour les jeux vidéos.
__________________
Cherche un(e ) développeur/se pour la version Windows et/ou Linux de sfeMovie! Puis pour aider sur le noyau une fois les portages au point
Blog à ne SURTOUT PAS visiter :p
Ceylo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 07h13   #8
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
d'accord merci a tous..
pour recadrer un peu ma question il faut juste savoir quil y a 15 jour pour moi le C c'etait jsute une lettre (j'exagere a peine) (je programme en action script) suite au tuto de M@teo21 sur le site du zero jai donc reussi apres quelques essais a faire defiler mes photos d'un dossier avec les fleche droite et gauche.
donc pardonnez moi si mes questions semblent naives ou le sont rééllement.; voila je vais donc regarder du cote de GTK.. mais dois je tout refaire pour afficher mes photo ou je peux garder SDL pour creer l'ecran mettre les photo etc.puis me sevrir de GTK ou dois jetout recommencer avec GTK ?

edit:desolé d'avoir poser la derniere question puisque Frank.Hmavait deja repondu plus haut..

merci et bon dimanche
hubeert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 09h22   #9
Rédacteur
 
Avatar de Franck.H
 
Franck HECHT
Inscription : janvier 2004
Messages : 5 575
Détails du profil
Informations personnelles :
Nom : Franck HECHT
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 5 575
Points : 6 991
Points : 6 991
Envoyer un message via MSN à Franck.H
Citation:
Envoyé par hubeert
... mais dois je tout refaire pour afficher mes photo ou je peux garder SDL pour creer l'ecran mettre les photo etc.puis me sevrir de GTK ou dois jetout recommencer avec GTK ?
Bin oui et non, le mieux serait sans doute de virer tout ce qui concerne SDL mais la création d'un widget GtkSDL est en cours sur developpez.com, faut juste voir s'il est déjà utilisable: http://gtksdl.developpez.com/ sinon oui, il faut que tu adaptes tout ton code pour GTK+ mais je te conseil d'apprendre les bases de cette lib avant de commencer: http://gtk.developpez.com/cours/gtk2/

Autant SDL s'apprend très rapidement, GTK+ est très très vaste et est même divisée en plusieurs sous-bibliothèque si on peut dire ainsi mais autant te prévenir, si tu ne connais pas ou très mal les pointeurs et les concepts avancés du C, apprend tout d'abord le langage en lui même, en générale on préconise au minimum 6 mois d'apprentissage sérieux
__________________
Mon Site
Groupe social des amateurs du langage C
Ma bibliothèque de gestion de chaînes de caractères : CStr


"L'imagination est plus importante que le savoir" A. Einstein
Franck.H est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 21h18   #10
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
merci a toi..
je connais tres mal les concept avancés. ta remarque me semble pleine de sagesse. (jai acheté le Kernighan) je vais déjà voir les tutos qur tu m'indiques et je t'en remercie.. et mon petit diaporama attendra pour avoir son menu thorsten lempke peut dormir sur ses deux oreilles!!

merci a tous
hubeert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 22h06   #11
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 292
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 292
Points : 2 740
Points : 2 740
Citation:
Envoyé par Spootnik
Dans un premier temps, si tu veux et peux utiliser l'objective-C, sers toi de Cocoa et la classe NSOpenPanel en particulier.

Code objective-C :
1
2
3
4
        if (resultat == NSOKButton)
            adresse = [[panneau filename] cString];
}
cString est deprecated... et a toujours été proscrit pour la gestion des noms de fichiers obtenus du file system...

Code :
1
2
3
        if (resultat == NSOKButton)
            adresse = [[panneau filename] fileSystemRepresentation];
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 23h43   #12
Membre Expert
 
Avatar de Ceylo
 
Étudiant
Inscription : janvier 2007
Messages : 1 196
Détails du profil
Informations personnelles :
Âge : 21
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 1 196
Points : 1 310
Points : 1 310
ah… je savais pas ça, merci de me l'avoir fait remarqué .
__________________
Cherche un(e ) développeur/se pour la version Windows et/ou Linux de sfeMovie! Puis pour aider sur le noyau une fois les portages au point
Blog à ne SURTOUT PAS visiter :p
Ceylo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h07.


 
 
 
 
Partenaires

Hébergement Web