#ifndef Datei_H #define Datei_H #include "Array.h" #include "Reader.h" #include "Writer.h" #include namespace Framework { class Text; //! Text.h class Zeit; //! Zeit.h namespace Encryption { class Key; //! Schlüssel.h } class Datei; //! aus dieser Datei //! Ließt und schreibt in eine Datei class Datei : public Reader, public Writer, public virtual ReferenceCounter { public: class Style { public: const static int lesen = 0x01; //! datei wird zum lesen geöffnet const static int schreiben = 0x02; //! datei wirt zum schreiben geöffnet const static int ende = 0x04; //! setzt dateizeiger ans Ende der Datei }; private: std::fstream *stream; Text *pfad; __int64 gr; char tmpLByte; char tmpLBPos; char tmpSByte; char tmpSBPos; Encryption::Key *key; public: //! Konstruktor DLLEXPORT Datei(); //! Destruktor DLLEXPORT virtual ~Datei(); //! Setzt den Pfad zur Datei //! \param pfad Der Pfad DLLEXPORT void setDatei( const char *pfad ); //! Setzt den Pfad zur Datei //! \param pfad Der Pfad DLLEXPORT void setDatei( Text *pfad ); //! Benennt die Datei um oder verschiebt sie //! \param pfad Der neue Pfad zur Datei. Wenn sich nur der Name ändert, wird sie nur umbenannt //! \return 1, wenn das umbenennen erfolgreich war. 0, sonst DLLEXPORT bool umbenennen( const char *pfad ); //! Benennt die Datei um oder verschiebt sie //! \param pfad Der neue Pfad zur Datei. Wenn sich nur der Name ändert, wird sie nur umbenannt //! \return 1, wenn das umbenennen erfolgreich war. 0, sonst DLLEXPORT bool umbenennen( Text *pfad ); //! Löscht die Datei //! \return 1, wenn das löschen erfolgreich war. 0 sonst DLLEXPORT bool remove(); //! Erstellt die Datei neu. Wenn im Pfad Ordner vorkommen, die nicht existieren, so werden sie erstellt //! return 1: wenn das erstellen erfolgreich war. 0, sonst DLLEXPORT bool erstellen(); //! Öffnet die Datei //! \param style Legt fest, ob die Datei zum lesen und/oder schreiben geöffnet wird. Alle Elemente aus Datei::Style:: sin möglich //! return 1: wenn die datei erfolgreich geöffnet werden konnte. 0 sonnst DLLEXPORT bool open( int style ); //! Setzt die Position des Bytes, das als nächstes gelesen werden soll //! \param pos Der Index des Bytes //! \param ende 1, wenn der Index vom ende der Datei zählt. 0, wenn der Index vom Beginn der Datei zählt DLLEXPORT void setLPosition( __int64 pos, bool ende ) override; //! Setzt die Position des Bytes, das als nächstes überschrieben wird //! \param pos Der Index des Bytes //! \param ende 1, wenn der Index vom ende der Datei zählt. 0, wenn der Index vom Beginn der Datei zählt DLLEXPORT void setSPosition( __int64 pos, bool ende ) override; //! Schreibt in die Datei //! \param bytes Ein Array von bytes, die geschrieben werden sollen. //! \param len Wie viele Bytes in die Datei geschrieben werden sollen DLLEXPORT void schreibe( const char *bytes, int len ) override; //! Ließt aus der Datei //! \param bytes Ein Array, der mit Bytes aus der Datei gefüllt werden soll //! \param len Wie viele Bytes aus der Datei gelesen werden sollen DLLEXPORT void lese( char *bytes, int len ) override; //! Ließt die nächste zeile der Datei ein //! \return Die gelesene Zeile als Text mit zeilenumbruch DLLEXPORT Text *leseZeile() override; //! Schließt die datei DLLEXPORT void close(); //! Setzt den Schlüssel für die Datei DLLEXPORT void setKey( char *s, int l ); #ifdef WIN32 //! Setzt den Zeitpunkt der letzten Änderung der Datei (nur für Windows) //! \param zeit den Zeitpunkt der letzten Änderung //! \return 1, wenn der Zeitpunkt gesetzt wurde. 0 sonst DLLEXPORT bool setLetzteÄnderung( Zeit *zeit ); #endif //! Ließt das nächste Bit aus der Datei //! \param bit Eine Referenz auf deinen bool, in dem das Bit gespeichert wird //! return 1, falls das lesen erfolgreich war. 0, sonst DLLEXPORT bool getNextBit( bool &bit ); //! Speichert ein einzelnes Bit in der Datei //! \param bit Das bit, welches gespeichert werden soll //! return 1, falls das speichern erfolgreich war DLLEXPORT bool setNextBit( bool bit ); //! Prüft, ob die Datei ein Verzeichnis ist //! return 1, falls die Datei ein Verzeichnis ist. 0, sonst DLLEXPORT bool istOrdner() const; //! Prüft, ob die Datei bereits geöffnet wurde //! \return 1, wenn die Datei geöffnet ist. 0 sonnst DLLEXPORT bool istOffen() const; //! Gibt die Anzahl an Unterdateien von dem Verzeichnis zurück //! \return 0, falls die Datei kein Verzeichnis ist. Sonst die Anzahl der Unterdateien DLLEXPORT int getUnterdateiAnzahl() const; //! Gibt eine Liste mit unterdateien zurück //! return 0, falls die Datei kein Verzeichnis ist. Eine Liste mit den Namen der Unterdateien DLLEXPORT RCArray< Text > *getDateiListe() const; //! Gibt die Größe der Datei zurück //! return -1, falls die Datei ein Verzeichnis ist oder ein Fehler auftrat. Sonst die größe der Datei DLLEXPORT __int64 getSize() const; //! Gibt den Zeitpunkt der letzten änderung zurück //! \return 0, falls ein Fehler aufgetreten ist. Der Zeitpunkt der letzten Änderung sonst DLLEXPORT Zeit *getLastChange() const; //! Prüft, ob die Datei existiert //! \return 1, falls die Datei existiert. 0 sonnst DLLEXPORT bool existiert() const; //! Gibt den Index des Bytes aus der Datei zurück, welches als nächstes gelesen werden würde //! return -1, falls ein Fehler aufgetreten ist. Sonst die Position des Lesezeigers DLLEXPORT __int64 getLPosition() const override; //! Gibt den Index des Bytes aus der Datei zurück, welches als nächstes überschrieben werden würde //! return -1, falls ein Fehler aufgetreten ist. Sonst die Position des Schreibzeigers DLLEXPORT __int64 getSPosition() const override; //! Prüft, ob die Datei vollständig gelesen wurde //! return 1, wenn die Datei vollständig gelesen wurde. 0, sonst DLLEXPORT bool istEnde() const override; //! Gibt den Pfad zur Datei zurück DLLEXPORT Text *getPfad() const; //! Gibt den Pfad zur Datei ohne erhöhten Reference Counter zurück DLLEXPORT Text *zPfad() const; }; //! Datei Funktionen //! Sucht einen unbenutzten Dateinamen //! \param zPfad Ein Zeiger zu dem Pfad, in dem ein unbenutzter Dateiname gefunden werden soll. Ohne erhöhten Reference Counter. //! Wird auch als rückgabewert benutzt DLLEXPORT void GetFreePfad( Text *zPfad ); //! Erstellt den vollständigen Pfad mit Datei //! \param pfad Der Pfad zur Datei //! \return 1, falls das erstellen erfolgreich war. DLLEXPORT bool DateiPfadErstellen( Text* pfad ); //! Löscht die angegebene Datei //! \param pfad Der Pfad zur Datei //! \return 1, falls die Datei gelöscht wurde DLLEXPORT bool DateiRemove( Text *pfad ); //! Benennt eine Datei um oder verschiebt sie //! pfad_alt: Der Pfad zur Datei, die umbenannt werden soll. //! pfad_neu: Der neue Pfad zur Datei. Wenn sich nur der Name ändert, wird sie nur umbenannt //! \return 1, wenn das umbenennen erfolgreich war. 0, sonst DLLEXPORT bool DateiUmbenennen( Text *pfad_alt, Text *pfad_neu ); //! Prüft, ob Datei existiert //! \param pfad Der Pfad zur Datei //! \return 1, wenn die Datei existiert. 0, wenn die Datei nicht gefunden wurde DLLEXPORT bool DateiExistiert( Text *pfad ); //! prüft, ob pfad ein Verzeichnis ist //! \param pfad Der Pfad zur Datei //! \return 1, wenn die Datei ein Verzeichnis ist. 0 sonst DLLEXPORT bool DateiIstVerzeichnis( Text *pfad ); //! Erstellt den vollständigen Pfad mit Datei //! \param pfad Der Pfad zur Datei //! \return 1, falls das erstellen erfolgreich war. DLLEXPORT bool DateiPfadErstellen( const char *pfad ); //! Löscht die angegebene Datei //! \param pfad Der Pfad zur Datei //! \return 1, falls die Datei gelöscht wurde DLLEXPORT bool DateiRemove( const char *pfad ); //! Benennt eine Datei um oder verschiebt sie //! pfad_alt: Der Pfad zur Datei, die umbenannt werden soll. //! pfad_neu: Der neue Pfad zur Datei. Wenn sich nur der Name ändert, wird sie nur umbenannt //! \return 1, wenn das umbenennen erfolgreich war. 0, sonst DLLEXPORT bool DateiUmbenennen( const char *pfad_alt, const char *pfad_neu ); //! Prüft, ob Datei existiert //! \param pfad Der Pfad zur Datei //! \return 1, wenn die Datei existiert. 0, wenn die Datei nicht gefunden wurde DLLEXPORT bool DateiExistiert( const char *pfad ); //! prüft, ob pfad ein Verzeichnis ist //! \param pfad Der Pfad zur Datei //! \return 1, wenn die Datei ein Verzeichnis ist. 0 sonst DLLEXPORT bool DateiIstVerzeichnis( const char *pfad ); } #endif