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 doppel backslash
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 doppel backslash 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 = false);
149 /////////////////////////////////////////////////
150 /// \brief Diese funktion gibt rekursiv alle Unterordner eines
152 /// \param [IN] src Ordner dessen Unterordner 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 = false);
162 /////////////////////////////////////////////////
163 /// \brief Diese funktion gibt alle Unterordner eines
164 /// Ordners zurück (nicht rekursiv).
165 /// \param src Ordner dessen Unterordner zurückgegeben
167 /// \param Optional, Gibt an ob auch versteckte Unterordner
168 /// durchsucht werden sollen. (true ja,
170 /// \return string Vektor mit allen gefundenen Ordnern
171 /////////////////////////////////////////////////
172 std::vector<std::string> listDirsNonRecursive(const std::string &path,const bool showHiddenDirs = false);
174 /////////////////////////////////////////////////
175 /// \brief Diese funktion führt einen Befehl/ein Programm
177 /// \param path Pfad in dem der Befehl ausgeführt werden soll
178 /// \param command Auszuführender Befehl
179 /// \param params Bafehlsparameter
180 /// \param log optional, Pfad zu einer datei, in der die Konsolenausgabe
181 /// des Befehls geschrieben werden soll.
182 /////////////////////////////////////////////////
183 void executeCommand(const std::string &path, const std::string &command, std::vector<std::string> params,const std::string &log = "");
185 /////////////////////////////////////////////////
186 /// \brief Diese funktion setzt einen Dynamischen
187 /// Loader, der für das ausführen von Programmen
188 /// mit executeCommand auf Linux Systemen
189 /// verwendet werden soll.
190 /// \param Loader Pfad zum Loader
191 /////////////////////////////////////////////////
192 void setLinuxDynLoader(const std::string &Loader);
194 /////////////////////////////////////////////////
195 /// \brief Diese funktion gibt den gesetzten Loader
197 /// \return gesetzter Loader
198 /////////////////////////////////////////////////
199 std::string getLinuxDynLoader();
201 /////////////////////////////////////////////////
202 /// \brief Diese funktion entfernt einen gesetzten Loader.
203 /// Programme die mit executeCommand ausgeführt
204 /// werden, verwenden dann den standard Loader
206 /////////////////////////////////////////////////
207 void removeLinuxDynLoader();
209 /////////////////////////////////////////////////
210 /// \brief Durchsucht PATH nach übergebenem Kommando.
211 /// Gibt vollständigen Pfad zur Datei des Kommandos
213 /// \param executable Kommando dessen executable gesucht werden soll
214 /// \return vollständiger Pfad zur executable.
215 /////////////////////////////////////////////////
216 std::string findExecutableInPath(const std::string &executable);
218 /////////////////////////////////////////////////
219 /// \brief Gibt Dateinamen einer Datei mit Pfad retour.
220 /// \param file Dateiname mit Pfad
221 /// \return Dateiname
222 /////////////////////////////////////////////////
223 std::string getFileName(const std::string &file);
225 /////////////////////////////////////////////////
226 /// \brief Gibt Pfad einer Datei mit Pfad retour.
227 /// \param file Dateiname mit Pfad
229 /////////////////////////////////////////////////
230 std::string getPath(const std::string &file);
233 std::string mLinuxDynLoader;
237 #endif // FSHELPER_H_INCLUDED