1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: FSHelper.h
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
5 // Description: Diese Klasse stellt plattformunabhängige funktionen auf das
6 // Dateisystem zur verfügung. Bei fehler werden exeptions
7 // des Typs std::string geworfen.
9 ///////////////////////////////////////////////////////////////////////////
10 #ifndef FSHELPER_H_INCLUDED
11 #define FSHELPER_H_INCLUDED
18 /////////////////////////////////////////////////
19 /// \brief Diese Klasse beinhaltet Dateisystemfunktionen
20 /// Basierend auf C++11 und POSIX-1 standart und funktinieren
21 /// somit auf Windows und Linux.
22 /////////////////////////////////////////////////
23 class FSHelper : public Object
26 /////////////////////////////////////////////////
27 /// \brief Typedef für eine Datei. String Paar
28 /// für Ordner und Dateiname.
29 /////////////////////////////////////////////////
30 using File = std::pair<std::string, std::string>;
32 /////////////////////////////////////////////////
33 /// \brief Diese funktion gibt alle Deteien eines
35 /// \param src Ordner dessen Dateien zurückgegeben
37 /// \return Vector mit string Paaren der Dateien im
38 /// gegebenen Verzeichnis beinhaltet.
39 /////////////////////////////////////////////////
40 std::vector<File> listFiles(const std::string &src);
42 /////////////////////////////////////////////////
43 /// \brief Überprüft ob Ordner existiert
45 /// \return bool true wenn Ordner existiert,
47 /////////////////////////////////////////////////
48 bool dirExists(const std::string &dir);
50 /////////////////////////////////////////////////
51 /// \brief Überprüft ob Datei existiert
53 /// \return bool true wenn Datei existiert,
55 /////////////////////////////////////////////////
56 bool fileExists(const std::string &file);
58 /////////////////////////////////////////////////
59 /// \brief Diese funktion kopiert eine Datei.
60 /// \param src Quelldatei
61 /// \param dest Zieldatei
62 /////////////////////////////////////////////////
63 void copyFile(const std::string &src,const std::string &dest);
65 /////////////////////////////////////////////////
66 /// \brief Diese funktion kopiert einen Ordner.
67 /// \param src Quellordner
68 /// \param dest Zielordner
69 /////////////////////////////////////////////////
70 void copyDir(const std::string &src, const std::string &dest);
72 /////////////////////////////////////////////////
73 /// \brief Gibt aktuelles Arbeitsverzeichnis zurück.
74 /// \return aktuelles Arbeitsverzeichnis.
75 /////////////////////////////////////////////////
76 std::string getCurrentWorkingDir();
78 /////////////////////////////////////////////////
79 /// \brief Strenge Dateinamenüberprüfung. Überprüft
80 /// Dateinamen auf untypische zeichen.
81 /// \param src Dateiname
82 /// \return bool true wenn Dateiname kein untypisches
83 /// Zeichen beinhaltet, ansonsten false.
84 /////////////////////////////////////////////////
85 bool validFileName(const std::string &fName);
87 /////////////////////////////////////////////////
88 /// \brief Ersetzt alle / mit \\
89 /// \param dir Zu verarbeitender pfad
90 /// \return pfad mit ersetzten Zeichen
91 /////////////////////////////////////////////////
92 std::string convertPathToWindows(const std::string &dir);
94 /////////////////////////////////////////////////
95 /// \brief Ersetzt alle \\ mit /
96 /// \param dir Zu verarbeitender pfad
97 /// \return pfad mit ersetzten Zeichen
98 /////////////////////////////////////////////////
99 std::string convertPathToUnix(const std::string &dir);
101 /////////////////////////////////////////////////
102 /// \brief Fügt, falls fehlend, einen Slash an
103 /// das ende eines Pfades.
105 /// \return pfad garantiert mit slash am ende
106 /////////////////////////////////////////////////
107 std::string addDirLastSlash(const std::string &dir);
109 /////////////////////////////////////////////////
110 /// \brief Entfernt, falls existent, einen Slash
111 /// am ende eines Pfades.
113 /// \return Pfad garantiert ohne slash am ende
114 /////////////////////////////////////////////////
115 std::string rmDirLastSlash(const std::string &dir);
117 /////////////////////////////////////////////////
118 /// \brief Erstellt einen Ordner.
119 /// \param dir pfad des zu erstellenden Ordners.
120 /////////////////////////////////////////////////
121 void makeDir(const std::string &dir);
123 /////////////////////////////////////////////////
124 /// \brief Erstellt eine Datei.
125 /// \param path Pfad + Dateiname der zu erstellenden Datei.
126 /////////////////////////////////////////////////
127 void createFile(const std::string &path);
129 /////////////////////////////////////////////////
130 /// \brief Löscht eine Datei.
131 /// \param path Pfad + Dateiname der zu löschenden Datei.
132 /////////////////////////////////////////////////
133 void removeFile(const std::string &path);
135 /////////////////////////////////////////////////
136 /// \brief Diese funktion gibt alle Deteien eines
137 /// Ordners und dessen Unterordner zurück.
138 /// \param [IN] src Ordner dessen Dateien zurückgegeben
140 /// \param [OUT] files Vektor mit String Paaren aller gefundenen Dateien
142 /// \param [IN] Optional, Gibt an ob auch versteckte Unterordner
143 /// durchsucht werden sollen. (true ja,
145 /// \return true bei erfolg, false bei fehler
146 /////////////////////////////////////////////////
147 bool listFilesRecursive(const std::string &path, std::vector<FSHelper::File> &files,const bool showHiddenDirs);
149 /////////////////////////////////////////////////
150 /// \brief Diese funktion gibt rekursiv alle Unterordner eines
152 /// \param [IN] src Ordner dessen Dateien zurückgegeben
154 /// \param [OUT] string Vektor mit allen gefundenen Ordnern
155 /// \param [IN] Optional, Gibt an ob auch versteckte Unterordner
156 /// durchsucht werden sollen. (true ja,
158 /// \return true bei erfolg, false bei fehler
159 /////////////////////////////////////////////////
160 bool listDirsRecursive(const std::string &path, std::vector<std::string>& dirs,const bool showHiddenDirs);
162 /////////////////////////////////////////////////
163 /// \brief Diese funktion führt einen Befehl/ein Programm
165 /// \param path Pfad in dem der Befehl ausgeführt werden soll
166 /// \param command Auszuführender Befehl
167 /// \param params Bafehlsparameter
168 /// \param log optional, Pfad zu einer datei, in der die Konsolenausgabe
169 /// des Befehls geschrieben werden soll.
170 /////////////////////////////////////////////////
171 void executeCommand(const std::string &path, const std::string &command, std::vector<std::string> params,const std::string &log = "");
173 /////////////////////////////////////////////////
174 /// \brief Diese funktion setzt einen Dynamischen
175 /// Loader, der für das ausführen von Programmen
176 /// mit executeCommand auf Linux Systemen
177 /// verwendet werden soll.
178 /// \param Loader Pfad zum Loader
179 /////////////////////////////////////////////////
180 void setLinuxDynLoader(const std::string &Loader);
182 /////////////////////////////////////////////////
183 /// \brief Diese funktion gibt den gesetzten Loader
185 /// \return gesetzter Loader
186 /////////////////////////////////////////////////
187 std::string getLinuxDynLoader();
189 /////////////////////////////////////////////////
190 /// \brief Diese funktion entfernt einen gesetzten Loader.
191 /// Programme die mit executeCommand ausgeführt
192 /// werden, verwenden dann den standard Loader
194 /////////////////////////////////////////////////
195 void removeLinuxDynLoader();
197 /////////////////////////////////////////////////
198 /// \brief Durchsucht PATH nach übergebenem Kommando.
199 /// Gibt vollständigen Pfad zur Datei des Kommandos
201 /// \param executable Kommando dessen executable gesucht werden soll
202 /// \return vollständiger Pfad zur executable.
203 /////////////////////////////////////////////////
204 std::string findExecutableInPath(const std::string &executable);
206 /////////////////////////////////////////////////
207 /// \brief Gibt Dateinamen einer Datei mit Pfad retour.
208 /// \param file Dateiname mit Pfad
209 /// \return Dateiname
210 /////////////////////////////////////////////////
211 std::string getFileName(const std::string &file);
213 /////////////////////////////////////////////////
214 /// \brief Gibt Pfad einer Datei mit Pfad retour.
215 /// \param file Dateiname mit Pfad
217 /////////////////////////////////////////////////
218 std::string getPath(const std::string &file);
221 std::string mLinuxDynLoader;
225 #endif // FSHELPER_H_INCLUDED