files.h
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <fstream>
7 #include <string>
8 #include <iostream> // for debug output
9 #include <iomanip>
10 #include <sys/stat.h>
11 #include <locale>
12 #include <codecvt>
13 
14 #include <boost/system/error_code.hpp>
15 #include <boost/version.hpp>
16 
17 #ifdef TESTING
18 #include "gtest/gtest.h"
19 #endif
20 
21 #if BOOST_VERSION < 107000
22 #define BOOST_COPY_OPTION_OVERWRITE boost::filesystem::copy_option::overwrite_if_exists
23 #else
24 #define BOOST_COPY_OPTION_OVERWRITE boost::filesystem::copy_options::overwrite_existing
25 #endif
26 
27 namespace dpyFiles {
28 /********************************************************************************
29  **********************************INLINE FUNCTIONS *****************************
30  ********************************************************************************/
31 
37 inline bool fileExist(const std::string& name)
38 {
39  struct stat buffer;
40  return (stat(name.c_str(), &buffer) == 0);
41 }
42 
43 }
52 class Files
53 {
54 public:
55  Files();
56  virtual ~Files();
57 
58 #ifdef TESTING
59  virtual bool readFile(boost::system::error_code& ec, const std::string& sPath, std::string& result, const bool binary=false);
60  virtual bool readFileUtf8(boost::system::error_code& ec, const std::string& sPath, std::string& result);
61  virtual void readContentandClose(std::ifstream& iFile, std::string& result);
62  virtual void readContentandClose(std::wifstream& iFile, std::string& result);
63  virtual bool writeFile(boost::system::error_code& ec, const std::string& sPath, const std::string& property_value);
64  virtual bool createAndWrite(boost::system::error_code& ec, const std::string& sPath, const std::string& property_value, const bool atomic=false);
65  virtual void writeContentandClose(std::ofstream& oFile, const std::string& value);
66  virtual bool addContentToFile(boost::system::error_code& ec, const std::string& sPath, const std::string& content);
67  virtual bool createAndAddContentToFile(boost::system::error_code& ec, const std::string& sPath, const std::string& content, const bool atomic=false);
68  virtual bool readNumOfLines(boost::system::error_code& ec, const std::string& sPath, std::string& result, const int num, const bool binary=false);
69  virtual void getLines(std::ifstream& iFile, const int num, std::string& result);
70  virtual bool removeFile(const std::string& sPath);
71  virtual bool isPath(boost::system::error_code& ec, const std::string& path);
72  virtual bool isRegularFile(boost::system::error_code& ec, const std::string& path);
73  virtual bool isDirectory(boost::system::error_code& ec, const std::string& path);
74  virtual bool isFileOpened(std::ifstream& iFile);
75  virtual bool isFileOpened(std::wifstream& iFile);
76  virtual bool isFileOpened(std::ofstream& oFile);
77 #else
78  bool readFile(boost::system::error_code& ec, const std::string& sPath, std::string& result, const bool binary = false);
79  bool readFileUtf8(boost::system::error_code& ec, const std::string& sPath, std::string& result);
80  void readContentandClose(std::ifstream& iFile, std::string& result);
81  void readContentandClose(std::wifstream& iFile, std::string& result);
82  bool writeFile(boost::system::error_code& ec, const std::string& sPath, const std::string& property_value);
83  bool createAndWrite(boost::system::error_code& ec, const std::string& sPath, const std::string& property_value, const bool atomic=false);
84  void writeContentandClose(std::ofstream& oFile, const std::string& value);
85  bool addContentToFile(boost::system::error_code& ec, const std::string& sPath, const std::string& content);
86  bool createAndAddContentToFile(boost::system::error_code& ec, const std::string& sPath, const std::string& content, const bool atomic=false);
87  bool readNumOfLines(boost::system::error_code& ec, const std::string& sPath, std::string& result, const int num, const bool binary = false);
88  void getLines(std::ifstream& iFile, const int num, std::string& result);
89  bool removeFile(const std::string& sPath);
90  bool isPath(boost::system::error_code& ec, const std::string& path);
91  bool isRegularFile(boost::system::error_code& ec, const std::string& path);
92  bool isDirectory(boost::system::error_code& ec, const std::string& path);
93  bool isFileOpened(std::ifstream& iFile);
94  bool isFileOpened(std::wifstream& iFile);
95  bool isFileOpened(std::ofstream& oFile);
96 
97 #endif
98 
99  bool createDir(boost::system::error_code& ec, const std::string& path);
100  std::string getFilename(const std::string& path);
101  std::string getFoldername(const std::string &path);
102 
103 #ifdef TESTING
104 public:
105  FRIEND_TEST(Basic_files_test, fileExist_OK);
106  FRIEND_TEST(Basic_files_test, fileExist_FAIL);
107  FRIEND_TEST(Basic_files_test, createDir_OK);
108  FRIEND_TEST(Basic_files_test, createDir_FAIL);
109  FRIEND_TEST(Basic_files_test, isDirectory_OK);
110  FRIEND_TEST(Basic_files_test, isDirectory_FAIL);
111  FRIEND_TEST(Basic_files_test, isRegularFile_OK);
112  FRIEND_TEST(Basic_files_test, isRegularFile_FAIL);
113  FRIEND_TEST(Basic_files_test, isPath_OK);
114  FRIEND_TEST(Basic_files_test, isPath_FAIL);
115  FRIEND_TEST(Basic_files_test, writeFile_OK);
116  FRIEND_TEST(Basic_files_test, writeFile_FAIL);
117  FRIEND_TEST(Basic_files_test, readFile_OK);
118  FRIEND_TEST(Basic_files_test, readFile_FAIL);
119  FRIEND_TEST(Basic_files_test, readFileUtf8_OK);
120  FRIEND_TEST(Basic_files_test, readFileUtf8_FAIL);
121 
122  FRIEND_TEST(Basic_files_test_mock, writeFile_error_path);
123  FRIEND_TEST(Basic_files_test_mock, writeFile_error_regular_file);
124  FRIEND_TEST(Basic_files_test_mock, writeFile_error_opened_file);
125  FRIEND_TEST(Basic_files_test_mock, readFile_error_path);
126  FRIEND_TEST(Basic_files_test_mock, readFile_error_regular_file);
127  FRIEND_TEST(Basic_files_test_mock, readFile_error_opened_file);
128  FRIEND_TEST(Basic_files_test_mock, readFileUtf8_error_path);
129  FRIEND_TEST(Basic_files_test_mock, readFileUtf8_error_regular_file);
130  FRIEND_TEST(Basic_files_test_mock, readFileUtf8_error_opened_file);
131 
132 #endif
133 };
This class implementes the read/write operations to work with text files stored in the file sytem...
Definition: files.h:52
bool fileExist(const std::string &name)
check if the file already exists
Definition: files.h:37
Definition: files.h:27