dirstr::dirstream Class Reference

dirstream ermöglicht die Traversierung eines Verzeichnisses über ein istream-ähnliches Interface. More...

List of all members.

Public Member Functions

 dirstream (const char *dirName, const filter_base &entryFilter=no_f(), recurse_mode recMode=recursive_no, const filter_base &subDirFilter=no_f())
 ~dirstream ()
 Schließt den Strom und gibt alle Ressourcen frei.
 operator unspecified_bool_type () const
dirstreamoperator>> (std::string &name)
std::streamsize readsome (std::string *r, std::streamsize n)
bool open (const char *dirName, const filter_base &entryFilter, recurse_mode recMode=recursive_no, const filter_base &subDirFilter=no_f())
bool open (const char *dirName, recurse_mode recMode=recursive_no)
 Öffnet das Verzeichnis dirName unter Verwendung der im Konstruktor angegebenen Filter.
bool is_open () const
 Liefert true, falls ein Verzeichnis erfolgreich geöffnet wurde.
void rewind ()
 "Spult" ein Verzeichnisstrom zurück.
void close ()
 Schließt den Verzeichnisstrom und gibt das intern verwaltet Verzeichnis-Handle frei.


Detailed Description

dirstream ermöglicht die Traversierung eines Verzeichnisses über ein istream-ähnliches Interface.

Author:
Benjamin Kaufmann
Date:
2002-2004
Version:
0.4
Die Traversierung eines Verzeichnisses kann über zwei Filter-Objekte beeinflusst werden. Der Entry-Filter wird für jeden Verzeichniseintrag aufgerufen. Konkrete Entry-Filter müssen für jeden Eintrag entscheiden, ob dieser ausgewählt (Filter liefert true) oder ignoriert (Filter liefert false) werden soll. Der SubDir-Filter wird nur bei der rekursiven Verzeichnissuche verwendet. Er wird für jedes Unterverzeichnis aufgerufen. Liefert der Filter true, wird das Unterverzeichnis berücksichtigt andernfalls wird es ignoriert. Beide Filter-Typen müssen das Interface filter_base implementieren.
Note:
An den dirstream übergebene Filter werden niemals direkt verwendet. Stattdessen erzeugt und verwendet ein dirstream-Objekt immer ein Klon
See also:
filter_base

pred_f

mem_fun_f

ptr_fun_f


Constructor & Destructor Documentation

dirstr::dirstream::dirstream ( const char *  dirName,
const filter_base entryFilter = no_f(),
recurse_mode  recMode = recursive_no,
const filter_base subDirFilter = no_f() 
)

Erstellt ein neues dirstream-Objekt für die Durchwanderung des Verzeichnisses dirName.

Precondition:
dirName != 0
Parameters:
dirName Name des zu durchwandernden Verzeichnisses
entryFilter Filter der für die Auswahl von Verzeichniseinträgen verwendet werden soll. Der Default-Wert no_f steht für "kein Filter", es werden alle Verzeichniseinträge ausgewählt.
recMode Zu verwendender Suchmodus.
subDirFilter Filter der bei der Auswahl von Unterverzeichnissen angewendet werden soll. Wird nur berücksichtigt falls recurse_mode::recursive_yes angegeben wurde. Der Default-Wert no_f steht für "kein Filter", es werden alle Unterverzeichnisse ausgewählt.
Exceptions:
open_error Eine open_error-Exception wird geworfen, falls dirName kein gültiges Verzeichnis ist bzw. dieses Verzeichnis nicht geöffnet werden kann.
Postcondition:
is_open() liefert true

dirstr::dirstream::~dirstream (  ) 

Schließt den Strom und gibt alle Ressourcen frei.

Der Destruktor ruft implizit die close-Funktion auf. close muss also in der Regel nicht explizit aufgerufen werden.


Member Function Documentation

dirstr::dirstream::operator unspecified_bool_type (  )  const [inline]

Ermöglicht die Verwendung eines Stream-Objekts innerhalb eines bool'schen Ausdrucks. Erlaubt also Ausdrücke wie if (stream)

See also:
dirstream::is_open() const

dirstream & dirstr::dirstream::operator>> ( std::string &  name  ) 

Über diesen Operator wird der nächste Eintrag des Verzeichnisses eingelesen.

Precondition:
is_open() liefert true
Parameters:
name String in dem der Name des aktuellen Verzeichniseintrags gespeichert werden soll.
Postcondition:
name enthält den aktuellen Verzeichniseintrag relativ zum Startverzeichnis. Existiert kein weiterer Eintrag, liefert der Vergleich *this == 0 true und der Wert von name ist undefiniert.
Exceptions:
open_error Eine open_error-Exception wird geworfen, falls bei der rekursiven Traversierung eines Verzeichnisses ein Unterverzeichnis nicht geöffnet werden kann.

std::streamsize dirstr::dirstream::readsome ( std::string *  r,
std::streamsize  n 
)

Liest maximal n-Einträge aus dem Verzeichnis-Strom und speichert diese im Array r.

Precondition:
is_open() liefert true

n >= 0

Parameters:
r String-Array der Größe n oder größer.
n Anzahl der zu lesenden Einträge
Returns:
Anzahl der tatsächlich gelesenen Einträge.
Exceptions:
open_error Eine open_error-Exception wird geworfen, falls bei der rekursiven Traversierung eines Verzeichnisses ein Unterverzeichnis nicht geöffnet werden kann.

bool dirstr::dirstream::open ( const char *  dirName,
const filter_base entryFilter,
recurse_mode  recMode = recursive_no,
const filter_base subDirFilter = no_f() 
)

See also:
dirstream(const char*, const filter_base&, recurse_mode, const filter_base&) Sollte dieses Objekt bereits mit einem Verzeichnis verbunden sein, ruft open zuerst close auf bevor es das neue Verzeichnis öffnet.

bool dirstr::dirstream::open ( const char *  dirName,
recurse_mode  recMode = recursive_no 
)

Öffnet das Verzeichnis dirName unter Verwendung der im Konstruktor angegebenen Filter.

Sollte dieses Objekt bereits mit einem Verzeichnis verbunden sein, ruft open zuerst close auf bevor es das neue Verzeichnis öffnet.

void dirstr::dirstream::rewind (  ) 

"Spult" ein Verzeichnisstrom zurück.

Ein solcher Strom kann also wieder von vorne durchlaufen werden. Der Aufruf von rewind invalidiert alle Dirstream-Iteratoren die mit diesem Strom verbunden sind.

Precondition:
is_open() liefert true

void dirstr::dirstream::close (  ) 

Schließt den Verzeichnisstrom und gibt das intern verwaltet Verzeichnis-Handle frei.

Der Aufruf von close macht alle dirstream_iteratoren die mit diesem Objekt verbunden sind ungültig.

Postcondition:
is_open() liefert false


The documentation for this class was generated from the following files:
Generated on Fri Apr 27 13:12:36 2007 for Highlight Code Converter by  doxygen 1.5.2