bcadeb672b6c04f3783c7bc31c69abac0ff11c44
[hsd_doku_tool.git] / 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 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(std::string const &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(std::string const &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(std::string const &file);
57
58 /////////////////////////////////////////////////
59 /// \brief Diese funktion kopiert eine Datei.
60 /// \param src Quelldatei
61 /// \param dest Zieldatei
62 /// \return bool Bei Erfolg true, ansonsten false
63 /////////////////////////////////////////////////
64     bool copyFile(std::string const &src, std::string const &dest);
65
66 /////////////////////////////////////////////////
67 /// \brief Diese funktion kopiert einen Ordner.
68 /// \param src Quellordner
69 /// \param dest Zielordner
70 /// \return bool Bei Erfolg true, ansonsten false
71 /////////////////////////////////////////////////
72     bool copyFolder(std::string const &src, std::string const &dest);
73
74 /////////////////////////////////////////////////
75 /// \brief Strenge Dateinamenüberprüfung. Überprüft
76 ///        Dateinamen auf untypische zeichen.
77 /// \param src Dateiname
78 /// \return bool true wenn Dateiname kein untypisches
79 ///         Zeichen beinhaltet, ansonsten false.
80 /////////////////////////////////////////////////
81     bool validFileName(std::string const &fName);
82
83 /////////////////////////////////////////////////
84 /// \brief Ersetzt alle / mit \\
85 /// \param dir Zu verarbeitender pfad
86 /// \return pfad mit ersetzten Zeichen
87 /////////////////////////////////////////////////
88     std::string convertPathToWindows(std::string dir);
89
90 /////////////////////////////////////////////////
91 /// \brief Ersetzt alle \\ mit /
92 /// \param dir Zu verarbeitender pfad
93 /// \return pfad mit ersetzten Zeichen
94 /////////////////////////////////////////////////
95     std::string convertPathToUnix(std::string dir);
96
97 /////////////////////////////////////////////////
98 /// \brief Fügt, falls fehlend, einen Slash an
99 ///        das ende eines Pfades.
100 /// \param dir pfad
101 /// \return pfad garantiert mit slash am ende
102 /////////////////////////////////////////////////
103     std::string addDirLastSlash(std::string const& dir);
104
105 /////////////////////////////////////////////////
106 /// \brief Entfernt, falls existent, einen Slash
107 ///        am ende eines Pfades.
108 /// \param dir pfad
109 /// \return pfad garantiert ohne slash am ende
110 /////////////////////////////////////////////////
111     std::string rmDirLastSlash(std::string const& dir);
112
113 /////////////////////////////////////////////////
114 /// \brief Erstellt einen Ordner.
115 /// \param dir pfad des zu erstellenden Ordners.
116 /// \return true bei erfolg, false bei fehler
117 /////////////////////////////////////////////////
118     bool makeDir(std::string const& dir);
119
120 /////////////////////////////////////////////////
121 /// \brief Erstellt eine Datei.
122 /// \param dir pfad der zu erstellenden Datei.
123 /// \return true bei erfolg, false bei fehler
124 /////////////////////////////////////////////////
125     bool createFile(std::string const& path);
126
127 /////////////////////////////////////////////////
128 /// \brief Diese funktion gibt alle Deteien eines
129 ///        Ordners und dessen Unterordner zurück.
130 /// \param [IN] src Ordner dessen Dateien zurückgegeben
131 ///        werden sollen.
132 /// \param [OUT] files Vektor mit String Paaren aller gefundenen Dateien
133 ///              und deren Pfad.
134 /// \param [IN] Optional, Gibt an ob auch versteckte Unterordner
135 ///        durchsucht werden sollen. (true ja,
136 ///        false nein)
137 /// \return true bei erfolg, false bei fehler
138 /////////////////////////////////////////////////
139     bool listFilesRecursive(const std::string& path, std::vector<FSHelper::File>& files,const bool showHiddenDirs);
140
141 /////////////////////////////////////////////////
142 /// \brief Diese funktion gibt rekursiv alle Unterordner eines
143 ///        Ordners zurück.
144 /// \param [IN] src Ordner dessen Dateien zurückgegeben
145 ///        werden sollen.
146 /// \param [OUT] string Vektor mit allen gefundenen Ordnern
147 /// \param [IN] Optional, Gibt an ob auch versteckte Unterordner
148 ///        durchsucht werden sollen. (true ja,
149 ///        false nein)
150 /// \return true bei erfolg, false bei fehler
151 /////////////////////////////////////////////////
152     bool listFoldersRecursive(const std::string& path, std::vector<std::string>& folders,const bool showHiddenDirs);
153
154 };
155
156 #endif // FSHELPER_H_INCLUDED