Anzeige:
Ergebnis 1 bis 7 von 7

Thema: c: verzeichnisse durchlaufen und best. dateien ausgeben?

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.08.2002
    Beiträge
    114

    c: verzeichnisse durchlaufen und best. dateien ausgeben?

    Ich möchte ein kleines Konsolen-Programm (primär für Windows, aber unter Linux entwickelt ) schreiben, dass alle ein verzeichnis und alle unterverzeischnisse durchläuft und alle gefundenen dateien eines typs (z.B. .mp3) ausgibt.
    ein aufruf wäre dann z.B. "mp3_lister /music"
    Die Ausgabe solle ungefähr in der Form stattfinden:
    /music
    /chills
    lied1.mp3
    lied2.mp3
    /drum 'n' bass
    nocheinlied.mp3

    usw.

    Wie finde ich raus, ob ein eintrag ein verzeichnis oder eine Datei ist? Hab irgendwo was dazu gefunden, aber das funktioniert nicht wirklich (und ich bin noch nicht wirklich erfahren in c....)
    mein programm bis jetzt:
    PHP-Code:
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <stdio.h>
    #include <string.h>

    //
    // Uncomment the following line for Windows version
    //
    // #define WIN

    //--------------------------------------------------------------------------

    int mainint argcchar *argv[] )
    {
        
    DIR *dir;
        
    struct dirent *dir_handle;
        
    struct stat attribute;
        
    char *search_dir argv[1];
        
    char *extension ".mp3";
        
    char *entry;
        
        if( 
    argc != )
        {
            
    printf"Falscher Programmaufruf!\n" );
            
    printf"Richtig: %s d:\\ c:\\Eigene Dateien\\\n"argv[0] );
        }

        if( !( 
    dir opendirsearch_dir ) ) )
        {
            
    fprintfstderr"%s kann nicht geöffnent werden.\n"search_dir );
            exit( 
    );
        }
        
    printf"%s\n"search_dir );

        while( 
    dir_handle readdirdir ) )
        {
            
    entry = (*dir_handle).d_name;
            
    statentry, &attribute );
            if( 
    attribute.st_mode S_IFDIR )
            {
                
    printf"\t/%s\n"entry );
            }

            if( 
    strstrentryextension ) )
            {
                
    printf"\t%s\n", (*dir_handle).d_name );
            }
        }

        
    closedirdir );

        return 
    0;


  2. #2
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650
    Im ANSI-Standard findet man nichts dafür, so dass man beim Compiler nachsehen muss, welche Funktionen er dafür bietet. Alternativ kann man über die Shell arbeiten.

  3. #3
    Registrierter Benutzer
    Registriert seit
    01.12.2002
    Ort
    Bad Essen
    Beiträge
    11
    Schau dir mal die in <sys/stat.h> definierten Makros S_ISREG() und S_ISDIR() an.

    _Wesentlich_ einfacher waer es mit /usr/bin/file und einem shell script zu machen.
    Reality corrupt. Reboot universe? (Y/N)

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.11.2002
    Ort
    Hennef
    Beiträge
    106
    hallo,


    if( argc != 2 )

    {

    printf( "Falscher Programmaufruf!\n" );

    printf( "Richtig: %s d: \\ c: \\Eigene Dateien\n", argv[0] );

    exit(1);
    }

    ist wohl besser
    (die meldung gilt aber nur für Windows)

    dein programm funktioniert nur für das DIR das
    du beim Aufruf mit übergeben hast. Für jedes gefundene
    DIR mußt du natürlich ein neues opendir machen.

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.08.2002
    Beiträge
    114
    das ist mir schon klar, aber um ein neues opendir zu machen, muss ich ja erstmal rausfinden, ob der aktuelle eintrag ein dir ist, oder nicht. geht ja in c leider nicht so komfortable wie in php.
    und das das programm für einen win-user gedacht ist, funktioniert ein bash-script leider nicht... ;-)

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Könntest du nicht einfach das find aus dem Cygwin Paket benutzen?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    08.11.2002
    Ort
    Hennef
    Beiträge
    106
    schnipp

    entry = (*dir_handle).d_name;

    chdir(search_dir);

    stat( entry, &attribute );

    schnap

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •