[Ansi C/C++] Verzeichnis Scannen

Hi!

Ich benötige die Funktion ein Verzeichnis nach Datein zu scannen.

Die Funktionalität muß dabei Portabel sein - also AnsiC/C++

Jemand einen Tipp ?

Ich finde nichts :frowning:

(Werde wohl ne proxyklasse schreiben müssen die bei jedem System neu erstellt wird ? :frowning: )

thx

Michael

Hallo Michael

Ich benötige die Funktion ein Verzeichnis nach Datein zu
scannen.

Die Funktionalität muß dabei Portabel sein - also AnsiC/C++

Da wirst du Schwirigkeiten bekommen denke ich. In den ANSI-Standards gibt es solche Funktionen nicht.

Allerdings besitzen die meisten Compiler Funktionen die in etwa FindFirst() und FindNext() heißen. Schätzungsweise werden diese leicht unterschiedliche Parameter verlangen und etwas andere Fehleranfragen machen. Du wirst also um Wrapper-Funktionen bzw. Klasse nicht umher kommen, wenn du die Benutzung der Funktionen portabel halten möchtest.

Gruss Jens

heul snif jammer :smile:
Hi Jens,

irgendwie hatte ich gehofft das mir jemand schreibt das es soetwas in Ansi gibt.

Ok - dann vielen Dank für die Info.

Werde mal anfangen eine Klasse zu Programmieren.

Viele Grüße

Michael

Hier eine kleine ScanDir Klasse
// Erstellt mit Borland C++ Builder 5
// 16.10.2001 Michael Roth
#ifndef class_scandir_h
#define class_scandir_h
#include
#include
#include
using namespace std;
class ScanDir
{
private:
string pfad;
list files;
list directory;

public:
void setPfad(string & _Pfad);
string getPfad();
list getFiles();
list getDirectory();
void scan(string & _findthis);
};

void ScanDir::setPfad(string & _Pfad)
{
pfad = _Pfad;
}

inline string ScanDir::getPfad()
{
return pfad;
}

inline list ScanDir::getFiles()
{
return files;

}

inline list ScanDir::getDirectory()
{
return directory;
}

void ScanDir::scan(string & _findthis)
{
struct ffblk ffblk;
int done;
done = findfirst((pfad + „\“ + _findthis).c_str(),&ffblk,FA_DIREC|FA_HIDDEN|FA_RDONLY|FA_SYSTEM|FA_DIREC|FA_ARCH);
while (!done)
{
long a;
a = ffblk.ff_attrib;
if(( a & FA_DIREC) == FA_DIREC)
directory.push_back(ffblk.ff_name);
else
files.push_back(ffblk.ff_name);

done = findnext(&ffblk);
}
}

#endif

Beispiel für die Klasse
//Sorry, ein Beispiel für die Klasse hab ich vergessen.

list temp;
ScanDir a;

a.setPfad(„t:\“);
a.scan("*.*");
temp = a.getFiles();

list::iterator pos;
for(pos = temp.begin();pos != temp.end();pos++)
cout