Dateisuche in C

mrpiper

Grünschnabel
Ich möchte ein kleines Programm in C schreiben, mit dem ich nach
Angabe eines Ordners nach Dateien mit der Endung *.h sowie *.c suchen kann!

In der Hilfe von Visual C++ 6 hab ich nichts finden können, bzw hab ich so viele
Suchergebnisse bekommen, dass ich mich nicht mehr rausgesehen habe.

Welche Befehle brauche ich also um nach Dateien zu suchen und dabei auch
nicht auf die Unterverzeichnisse zu vergessen!?

Vielen Dank schon mal! ;-)
 
Guck mal in der MSDN nach den funktionen

HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);
BOOL FindNextFile( HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData);
BOOL FindClose(HANDLE hFindFile);
 
Original geschrieben von chibisuke
Guck mal in der MSDN nach den funktionen

HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);
BOOL FindNextFile( HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData);
BOOL FindClose(HANDLE hFindFile);
Vielen Dank erstmal! ;-)

Sind das denn Funktionen für ANSI C?
Wenn ja, sagt mir der Datentyp HANDLE aber nichts!?
Könntest du mir genaueres über die Funtkionen sagen!?

DANKE
 
Danke, ich werd mal in der Library nachsehen.

Die Funktionen hab ich ja auch schon gefunden gehabt, aber es geht ja eben darum nur ANSI C zu verwenden. Es is nämlich für mein Studium und ich muss es auch abgeben! Also echt nur ANSI! Da komm ich nicht rum! ;-)
 
DANKE, ich habs jetzt schon gecheckt!
Mit der Funktion list_dir lässt sich ein
gesamtes Verzeichnis auslesen und am Bildschirm ausgeben.
Gefunden auf
http://www.pronix.de//index.php?site=C/standard_C/c_programmierung_20_2


#include <stdio.h>
#include <windows.h>

void list_dir(const char *path)
{
/*
The WIN32_FIND_DATA structure describes a file found by
the FindFirstFile, FindFirstFileEx, or FindNextFile function.

typedef struct _WIN32_FIND_DATA { // wfd
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[ MAX_PATH ];
TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;
*/

WIN32_FIND_DATA dir;
HANDLE fhandle;
char directory[256];

sprintf(directory,"%s\\*.*",path);
if ((fhandle=FindFirstFile(directory,&dir)) != INVALID_HANDLE_VALUE)
{
do
{ /* Verzeichnis auslesen */

if (dir.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
printf("dir ");

printf("%s\n", dir.cFileName);
} while(FindNextFile(fhandle,&dir));
}
printf("\n%s\n",directory);
FindClose(fhandle);
}

void main(int argc,char **argv)
{
if (argc < 2)
list_dir(".");
else
list_dir(argv[1]);
}
 
äh der datentyp HANDLE ist definiert als ein pointer to void, auch wenn dieser nie valid ist sondern nur einen zahlenwert halten soll. in unix benutzt man hierfür ints
Code:
typedef void *PVOID;
typedef PVOID HANDLE;

Wenn du also wegen HANDLE bedenken hast, so kannst du alle diese einfach durch void* ersetzen, dem compiler wird das nix ausmachen.

Es IST ANSI-C kompatibel, allerdings ist die funktion nicht in der libc enthalten sondern in eine windows spezifischen library, was aber insofern kein problem darstellt. Der code läst sich trotzdem mit jedem ANSI-C compiler kompilieren, musst ihm nur die lib angeben.
 
Zurück