#ifndef Datei_H #define Datei_H #include #include "Array.h" #include "Reader.h" #include "Writer.h" 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: static const int lesen = 0x01; //! datei wird zum lesen geöffnet static const int schreiben = 0x02; //! datei wirt zum schreiben geöffnet static const 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(); //! Konstruktor DLLEXPORT Datei(const char* pfad); //! Konstruktor DLLEXPORT Datei(Text* pfad); //! 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; //! Schreibt alle temporären bytes in die Datei DLLEXPORT void flush(); //! 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* 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); } // namespace Framework #endif