directory auslesen
-
hallo Leute,
leider funkt das mit der "dirent.h" unter DOS nicht so richtig.dies wäre der Code vom Netz gezogen:
#include <stdio.h> #include "dirent.h" void main() { DIR *dirp; struct dirent *direntp; /*************************************************************************** * Opens the current directory for examination. ***************************************************************************/ dirp = opendir( "." ); /*************************************************************************** * readdir() returns either a pointer to a structure containing directory * entry, or it returns a NULL to indicate that all the entries for the * corresponding opendir() directory have already been seen. ***************************************************************************/ while ( (direntp = readdir( dirp )) != NULL ) { /************************************************************************ * Here we are examining one of the components of the directory entry's * structure. I put {brackets} around the file name to show exactly * what portion of the output is the file name from the structure. ************************************************************************/ printf( "Found file {%s}\n", direntp->d_name ); } closedir( dirp ); exit(0); }
dabei bringt mir Visual C++ folgenden Fehler beim compilieren:
--------------------Configuration: readdir - Win32 Debug--------------------
Compiling...
readdir.c
C:\test_c\nobreaks\readdir.c(36) : warning C4013: 'exit' undefined; assuming extern returning int
Linking...
readdir.obj : error LNK2001: unresolved external symbol _closedir
readdir.obj : error LNK2001: unresolved external symbol _readdir
readdir.obj : error LNK2001: unresolved external symbol _opendir
readdir.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.
readdir.exe - 4 error(s), 1 warning(s)was heißt IMHO ?
und wie funktioniert das mit
findfirst/findnext (was im Prinzip nur Wrapper um 2 DOS-API-Aufrufe sind).
-
Original erstellt von ping79:
**
was heißt IMHO ?
**IMHO ist ein Akronym von In My Humble Opinion (= meiner bescheidenen Meinung nach).
mfg tHe pHreak
[ Dieser Beitrag wurde am 03.07.2003 um 15:03 Uhr von tHe pHreak editiert. ]
-
hi
du machst kein dos, sondern win32 konsole..
hier ein beispiel aus der msdn , läuft daher im studio:
#include <direct.h> #include <stdlib.h> #include <stdio.h> void main( void ) { char buffer[_MAX_PATH]; /* Get the current working directory: */ if( _getcwd( buffer, _MAX_PATH ) == NULL ) perror( "_getcwd error" ); else printf( "%s\n", buffer ); } Output C:\code
ist aber eher ein konsolenthema, nicht c standard..
wenns mehr wird, würde ich auf die winapi funktionen zurückgreifen, also die windows.h includieren
-
hmpf.
-
Original erstellt von ping79:
**leider funkt das mit der "dirent.h" unter DOS nicht so richtig.
**Tja, wenn dem Linker die Libraries fehlen, dann nützen auch die Headerdateien nichts...
-
#include "dirent.h"
heißt doch suche die Header Datei im selben Ordner wie die Quelldatei, oder? Da habe ich sie auch reinkopiert.
-
Die Headerdatei findet der Compiler ja auch, aber in den Headers sind nur die Funktionen deklariert, definiert liegen sie in Form von Programmcode in den Libraries, welche sich dann nach dem Kompilieren der Linker zusammensucht, um es mal einfach auszudrücken. Würde dein Compiler die Headers nicht finden, so käme eine Meldung ähnlich "Headerdatei bla.h nicht gefunden"...
-
Auf die Gefahr hin, dass ich nu ausgelacht werde:
Ich pipe mir die Ausgabe eines "dir"-Befehls unter DOS in ein txt-File, das parse ich dann.
-
HumeSikkins hat da mal was schönes dazu geschrieben. Sein DirStream lässt sich sehr leicht bedienen: http://fara.cs.uni-potsdam.de/~kaufmann/progs/dirstream.zip
Erklärung dazu auf bens.c-plusplus.info -> Sonstiges -> Tools
MfG SideWinder
-
Also die Funktionen von dirent.h funktionieren in DOS schon. Dazu braucht man aber auch einen DOS-Compiler, der noch die genannten Libraries besitzt.
Ob es mit findfirst/findnext im VC++ funktioniert ist fraglich. Du kannst es ja mal ausprobieren.
Die Lösung mit DIR ist viel zu kompliziert (und zu langsam) meines Erachtens.
Also ich würde das von HumeSikkins nehmen. Hab es mir zwar noch nicht angeschaut, aber ich glaube das ist bestimmt was Gescheites ;).