Xerxes
16-12-2002, 21:23
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:
#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 main( int argc, char *argv[] )
{
DIR *dir;
struct dirent *dir_handle;
struct stat attribute;
char *search_dir = argv[1];
char *extension = ".mp3";
char *entry;
if( argc != 2 )
{
printf( "Falscher Programmaufruf!\n" );
printf( "Richtig: %s d:\\ c:\\Eigene Dateien\\\n", argv[0] );
}
if( !( dir = opendir( search_dir ) ) )
{
fprintf( stderr, "%s kann nicht geöffnent werden.\n", search_dir );
exit( 1 );
}
printf( "%s\n", search_dir );
while( dir_handle = readdir( dir ) )
{
entry = (*dir_handle).d_name;
stat( entry, &attribute );
if( attribute.st_mode & S_IFDIR )
{
printf( "\t/%s\n", entry );
}
if( strstr( entry, extension ) )
{
printf( "\t%s\n", (*dir_handle).d_name );
}
}
closedir( dir );
return 0;
}
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:
#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 main( int argc, char *argv[] )
{
DIR *dir;
struct dirent *dir_handle;
struct stat attribute;
char *search_dir = argv[1];
char *extension = ".mp3";
char *entry;
if( argc != 2 )
{
printf( "Falscher Programmaufruf!\n" );
printf( "Richtig: %s d:\\ c:\\Eigene Dateien\\\n", argv[0] );
}
if( !( dir = opendir( search_dir ) ) )
{
fprintf( stderr, "%s kann nicht geöffnent werden.\n", search_dir );
exit( 1 );
}
printf( "%s\n", search_dir );
while( dir_handle = readdir( dir ) )
{
entry = (*dir_handle).d_name;
stat( entry, &attribute );
if( attribute.st_mode & S_IFDIR )
{
printf( "\t/%s\n", entry );
}
if( strstr( entry, extension ) )
{
printf( "\t%s\n", (*dir_handle).d_name );
}
}
closedir( dir );
return 0;
}