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

Apple Discussion :

parcourir disque dur sous Mac


Sujet :

Apple

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    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

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    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
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Sur le site du Zér0 tu as écrit ce code (Spootnik = Soltic Lucas) :

    Code C : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
     
    #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 */
    }

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    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

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    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
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    merci de tes indications ; je vais lire ca.. ..

  7. #7
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    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 : 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
     
    #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.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    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 tutoriel C sur le site 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

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    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
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    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

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 950
    Points : 4 373
    Points
    4 373
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            if (resultat == NSOKButton)
                adresse = [[panneau filename] fileSystemRepresentation];

  12. #12
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    ah… je savais pas ça, merci de me l'avoir fait remarqué .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifer l'état d'un disque dur sous Linux.
    Par troumad dans le forum Matériel
    Réponses: 10
    Dernier message: 03/03/2017, 17h43
  2. partitionner le disque dur sous vista
    Par kroukse dans le forum Windows Vista
    Réponses: 15
    Dernier message: 03/04/2008, 00h57
  3. Mini Projet en C (info disque dur) sous Linux
    Par exhortae dans le forum Linux
    Réponses: 8
    Dernier message: 21/11/2007, 14h41
  4. patitionner mon disque dur sous vista
    Par vacknov dans le forum Windows Vista
    Réponses: 7
    Dernier message: 02/08/2007, 14h16
  5. Formatage d'un disque dur sous Windows
    Par Rainmaker dans le forum x86 32-bits / 64-bits
    Réponses: 12
    Dernier message: 21/01/2005, 00h24

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