OGS
FileTools.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <cstddef>
7#include <iosfwd>
8#include <limits>
9#include <string>
10#include <tuple>
11#include <vector>
12
13namespace BaseLib
14{
20bool IsFileExisting(const std::string& strFilename);
21
28std::tuple<std::string, std::string::size_type, std::string::size_type>
29getParenthesizedString(std::string const& in,
30 char const open_char,
31 char const close_char,
32 std::string::size_type pos);
33
34std::string constructFormattedFileName(std::string const& format_specification,
35 std::string const& mesh_name,
36 int const timestep, double const t,
37 int const iteration,
38 bool const converged);
39
40std::vector<double> readDoublesFromBinaryFile(
41 const std::string& filename, std::string const& project_directory);
42
50template <typename T>
51void writeValueBinary(std::ostream& out, T const& val);
52
53template <typename T>
54T swapEndianness(T const& v)
55{
56 union
57 {
58 T v;
59 char c[sizeof(T)];
60 } a, b;
61
62 a.v = v;
63 for (unsigned short i = 0; i < sizeof(T); i++)
64 {
65 b.c[i] = a.c[sizeof(T) - i - 1];
66 }
67
68 return b.v;
69}
70
71double swapEndianness(double const& v);
72
73template <typename T>
74T readBinaryValue(std::istream& in);
75
76extern template float readBinaryValue<float>(std::istream&);
77extern template double readBinaryValue<double>(std::istream&);
78
79template <typename T>
80std::vector<T> readBinaryVector(
81 std::string const& filename, std::size_t const start_element = 0,
82 std::size_t const num_elements = std::numeric_limits<std::size_t>::max());
83
91std::string extractBaseName(std::string const& pathname);
92
98std::string extractBaseNameWithoutExtension(std::string const& pathname);
99
103std::string getFileExtension(std::string const& path);
104
109bool hasFileExtension(std::string const& extension,
110 std::string const& filename);
111
115std::string dropFileExtension(std::string const& filename);
116
122std::string extractPath(std::string const& pathname);
123
127std::string joinPaths(std::string const& pathA, std::string const& pathB);
128
131void removeFile(std::string const& filename);
132
135void removeFiles(std::vector<std::string> const& files);
136
137// Creates the given directory. Returns true on success.
138bool createOutputDirectory(std::string const& dir);
139} // end namespace BaseLib
void removeFile(std::string const &filename)
std::vector< T > readBinaryVector(std::string const &filename, std::size_t const start_element, std::size_t const num_elements)
std::string constructFormattedFileName(std::string const &format_specification, std::string const &mesh_name, int const timestep, double const t, int const iteration, bool const converged)
std::string getFileExtension(const std::string &path)
void writeValueBinary(std::ostream &out, T const &val)
write value as binary into the given output stream
std::string extractPath(std::string const &pathname)
std::tuple< std::string, std::string::size_type, std::string::size_type > getParenthesizedString(std::string const &in, char const open_char, char const close_char, std::string::size_type pos)
Definition FileTools.cpp:29
T readBinaryValue(std::istream &in)
bool IsFileExisting(const std::string &strFilename)
Returns true if given file exists.
Definition FileTools.cpp:23
template float readBinaryValue< float >(std::istream &)
std::string extractBaseNameWithoutExtension(std::string const &pathname)
std::string dropFileExtension(std::string const &filename)
std::string joinPaths(std::string const &pathA, std::string const &pathB)
template double readBinaryValue< double >(std::istream &)
std::string extractBaseName(std::string const &pathname)
double swapEndianness(double const &v)
bool createOutputDirectory(std::string const &dir)
std::vector< double > readDoublesFromBinaryFile(const std::string &filename, const std::string &project_directory)
bool hasFileExtension(std::string const &extension, std::string const &filename)
void removeFiles(std::vector< std::string > const &files)