Initial Commit
[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 \\
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 \\ 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);
148
149 /////////////////////////////////////////////////
150 /// \brief Diese funktion gibt rekursiv alle Unterordner eines
151 ///        Ordners zurück.
152 /// \param [IN] src Ordner dessen Dateien 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);
161
162 /////////////////////////////////////////////////
163 /// \brief Diese funktion führt einen Befehl/ein Programm
164 ///        aus.
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 = "");
172
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);
181
182 /////////////////////////////////////////////////
183 /// \brief Diese funktion gibt den gesetzten Loader
184 ///        retour.
185 /// \return gesetzter Loader
186 /////////////////////////////////////////////////
187     std::string getLinuxDynLoader();
188
189 /////////////////////////////////////////////////
190 /// \brief Diese funktion entfernt einen gesetzten Loader.
191 ///        Programme die mit executeCommand ausgeführt
192 ///        werden, verwenden dann den standard Loader
193 ///        des Systems.
194 /////////////////////////////////////////////////
195     void removeLinuxDynLoader();
196
197 /////////////////////////////////////////////////
198 /// \brief Durchsucht PATH nach übergebenem Kommando.
199 ///        Gibt vollständigen Pfad zur Datei des Kommandos
200 ///        retour.
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);
205
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);
212
213 /////////////////////////////////////////////////
214 /// \brief Gibt Pfad einer Datei mit Pfad retour.
215 /// \param file Dateiname mit Pfad
216 /// \return Pfad
217 /////////////////////////////////////////////////
218     std::string getPath(const std::string &file);
219
220 private:
221     std::string mLinuxDynLoader;
222
223 };
224
225 #endif // FSHELPER_H_INCLUDED