Restructure src folder. Add asset folder. Automatically pack files from asset folder...
[fltk_mvc_template.git] / _template / src / FSHelper.h
1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: FSHelper.h
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
4 // Date: 26.04.2018
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.
8 // Remarks: -
9 ///////////////////////////////////////////////////////////////////////////
10 #ifndef FSHELPER_H_INCLUDED
11 #define FSHELPER_H_INCLUDED
12
13 #include <iostream>
14 #include <vector>
15 #include "Object.h"
16
17
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
24 {
25 public:
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>;
31
32 /////////////////////////////////////////////////
33 /// \brief Diese funktion gibt alle Deteien eines
34 ///        Ordners zurück.
35 /// \param src Ordner dessen Dateien zurückgegeben
36 ///        werden sollen.
37 /// \return Vector mit string Paaren der Dateien im
38 ///         gegebenen Verzeichnis beinhaltet.
39 /////////////////////////////////////////////////
40     std::vector<File> listFiles(const std::string &src);
41
42 /////////////////////////////////////////////////
43 /// \brief Überprüft ob Ordner existiert
44 /// \param dir Ordner
45 /// \return bool true wenn Ordner existiert,
46 ///         ansonsten false.
47 /////////////////////////////////////////////////
48     bool dirExists(const std::string &dir);
49
50 /////////////////////////////////////////////////
51 /// \brief Überprüft ob Datei existiert
52 /// \param file Datei
53 /// \return bool true wenn Datei existiert,
54 ///         ansonsten false.
55 /////////////////////////////////////////////////
56     bool fileExists(const std::string &file);
57
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);
64
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);
71
72 /////////////////////////////////////////////////
73 /// \brief Gibt aktuelles Arbeitsverzeichnis zurück.
74 /// \return aktuelles Arbeitsverzeichnis.
75 /////////////////////////////////////////////////
76     std::string getCurrentWorkingDir();
77
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);
86
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);
93
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);
100
101 /////////////////////////////////////////////////
102 /// \brief Fügt, falls fehlend, einen Slash an
103 ///        das ende eines Pfades.
104 /// \param dir pfad
105 /// \return pfad garantiert mit slash am ende
106 /////////////////////////////////////////////////
107     std::string addDirLastSlash(const std::string &dir);
108
109 /////////////////////////////////////////////////
110 /// \brief Entfernt, falls existent, einen Slash
111 ///        am ende eines Pfades.
112 /// \param dir Pfad
113 /// \return Pfad garantiert ohne slash am ende
114 /////////////////////////////////////////////////
115     std::string rmDirLastSlash(const std::string &dir);
116
117 /////////////////////////////////////////////////
118 /// \brief Erstellt einen Ordner.
119 /// \param dir pfad des zu erstellenden Ordners.
120 /////////////////////////////////////////////////
121     void makeDir(const std::string &dir);
122
123 /////////////////////////////////////////////////
124 /// \brief Erstellt eine Datei.
125 /// \param path Pfad + Dateiname der zu erstellenden Datei.
126 /////////////////////////////////////////////////
127     void createFile(const std::string &path);
128
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);
134
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
139 ///        werden sollen.
140 /// \param [OUT] files Vektor mit String Paaren aller gefundenen Dateien
141 ///              und deren Pfad.
142 /// \param [IN] Optional, Gibt an ob auch versteckte Unterordner
143 ///        durchsucht werden sollen. (true ja,
144 ///        false nein)
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);
148
149 /////////////////////////////////////////////////
150 /// \brief Diese funktion gibt rekursiv alle Unterordner eines
151 ///        Ordners zurück.
152 /// \param [IN] src Ordner dessen Unterordner zurückgegeben
153 ///        werden sollen.
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,
157 ///        false nein)
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);
161
162 /////////////////////////////////////////////////
163 /// \brief Diese funktion gibt alle Unterordner eines
164 ///        Ordners zurück (nicht rekursiv).
165 /// \param src Ordner dessen Unterordner zurückgegeben
166 ///        werden sollen.
167 /// \param Optional, Gibt an ob auch versteckte Unterordner
168 ///        durchsucht werden sollen. (true ja,
169 ///        false nein)
170 /// \return string Vektor mit allen gefundenen Ordnern
171 /////////////////////////////////////////////////
172     std::vector<std::string> listDirsNonRecursive(const std::string &path,const bool showHiddenDirs = false);
173
174 /////////////////////////////////////////////////
175 /// \brief Diese funktion führt einen Befehl/ein Programm
176 ///        aus.
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 = "");
184
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);
193
194 /////////////////////////////////////////////////
195 /// \brief Diese funktion gibt den gesetzten Loader
196 ///        retour.
197 /// \return gesetzter Loader
198 /////////////////////////////////////////////////
199     std::string getLinuxDynLoader();
200
201 /////////////////////////////////////////////////
202 /// \brief Diese funktion entfernt einen gesetzten Loader.
203 ///        Programme die mit executeCommand ausgeführt
204 ///        werden, verwenden dann den standard Loader
205 ///        des Systems.
206 /////////////////////////////////////////////////
207     void removeLinuxDynLoader();
208
209 /////////////////////////////////////////////////
210 /// \brief Durchsucht PATH nach übergebenem Kommando.
211 ///        Gibt vollständigen Pfad zur Datei des Kommandos
212 ///        retour.
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);
217
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);
224
225 /////////////////////////////////////////////////
226 /// \brief Gibt Pfad einer Datei mit Pfad retour.
227 /// \param file Dateiname mit Pfad
228 /// \return Pfad
229 /////////////////////////////////////////////////
230     std::string getPath(const std::string &file);
231
232 private:
233     std::string mLinuxDynLoader;
234
235 };
236
237 #endif // FSHELPER_H_INCLUDED