Tag Parser  10.0.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
basicfileinfo.h
Go to the documentation of this file.
1 #ifndef TAG_PARSER_BASICFILEINFO_H
2 #define TAG_PARSER_BASICFILEINFO_H
3 
4 #include "./global.h"
5 
6 #include <c++utilities/conversion/stringconversion.h>
7 #include <c++utilities/io/nativefilestream.h>
8 
9 #include <cstdint>
10 #include <string>
11 
12 namespace TagParser {
13 
15 public:
16  // constructor, destructor
17  explicit BasicFileInfo();
18  explicit BasicFileInfo(std::string &&path);
19  explicit BasicFileInfo(std::string_view path);
20  BasicFileInfo(const BasicFileInfo &) = delete;
22  virtual ~BasicFileInfo();
23 
24  // methods to control associated file stream
25  void open(bool readOnly = false);
26  void reopen(bool readOnly = false);
27  bool isOpen() const;
28  bool isReadOnly() const;
29  void close();
30  void invalidate();
31  CppUtilities::NativeFileStream &stream();
32  const CppUtilities::NativeFileStream &stream() const;
33 
34  // methods to get, set path (components)
35  const std::string &path() const;
36  void setPath(std::string_view path);
37  void setPath(std::string &&path);
38  static std::string fileName(std::string_view path, bool cutExtension = false);
39  std::string fileName(bool cutExtension = false) const;
40  static std::string extension(std::string_view path);
41  std::string extension() const;
42  static std::string pathWithoutExtension(std::string_view fullPath);
43  std::string pathWithoutExtension() const;
44  static std::string containingDirectory(std::string_view path);
45  std::string containingDirectory() const;
46  static std::string_view pathForOpen(std::string_view url);
47 
48  // methods to get, set the file size
49  std::uint64_t size() const;
50  void reportSizeChanged(std::uint64_t newSize);
51  void reportPathChanged(std::string_view newPath);
52  void reportPathChanged(std::string &&newPath);
53 
54 protected:
55  virtual void invalidated();
56 
57 private:
58  std::string m_path;
59  CppUtilities::NativeFileStream m_file;
60  std::uint64_t m_size;
61  bool m_readOnly;
62 };
63 
69 inline bool BasicFileInfo::isOpen() const
70 {
71  return m_file.is_open();
72 }
73 
77 inline bool BasicFileInfo::isReadOnly() const
78 {
79  return m_readOnly;
80 }
81 
85 inline CppUtilities::NativeFileStream &BasicFileInfo::stream()
86 {
87  return m_file;
88 }
89 
93 inline const CppUtilities::NativeFileStream &BasicFileInfo::stream() const
94 {
95  return m_file;
96 }
97 
103 inline const std::string &BasicFileInfo::path() const
104 {
105  return m_path;
106 }
107 
115 inline std::uint64_t BasicFileInfo::size() const
116 {
117  return m_size;
118 }
119 
124 inline void BasicFileInfo::reportSizeChanged(std::uint64_t newSize)
125 {
126  m_size = newSize;
127 }
128 
133 inline void BasicFileInfo::reportPathChanged(std::string_view newPath)
134 {
135  m_path = newPath;
136 }
137 
142 inline void BasicFileInfo::reportPathChanged(std::string &&newPath)
143 {
144  m_path = std::move(newPath);
145 }
146 
153 inline std::string_view BasicFileInfo::pathForOpen(std::string_view url)
154 {
155  return CppUtilities::startsWith(url, "file:/") ? url.data() + 6 : url.data();
156 }
157 
158 } // namespace TagParser
159 
160 #endif // TAG_PARSER_BASICFILEINFO_H
The BasicFileInfo class provides basic file information such as file name, extension,...
Definition: basicfileinfo.h:14
void reportPathChanged(std::string_view newPath)
Call this function to report that the path changed.
const std::string & path() const
Returns the path of the current file.
bool isReadOnly() const
Indicates whether the last open()/reopen() call was read-only.
Definition: basicfileinfo.h:77
std::uint64_t size() const
Returns size of the current file in bytes.
BasicFileInfo & operator=(const BasicFileInfo &)=delete
CppUtilities::NativeFileStream & stream()
Returns the std::fstream for the current instance.
Definition: basicfileinfo.h:85
BasicFileInfo(const BasicFileInfo &)=delete
static std::string_view pathForOpen(std::string_view url)
Returns removes the "file:/" prefix from url to be able to pass it to functions like open(),...
void reportSizeChanged(std::uint64_t newSize)
Call this function to report that the size changed.
bool isOpen() const
Indicates whether a std::fstream is open for the current file.
Definition: basicfileinfo.h:69
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
constexpr TAG_PARSER_EXPORT std::string_view url()
Definition: matroskatagid.h:47
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:10