File: FileSystem.h

package info (click to toggle)
spring 104.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 47,512 kB
  • sloc: cpp: 391,093; ansic: 79,943; python: 12,356; java: 12,201; awk: 5,889; sh: 1,826; xml: 655; makefile: 486; perl: 405; php: 211; objc: 194; sed: 2
file content (132 lines) | stat: -rw-r--r-- 3,605 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */

#ifndef FILE_SYSTEM_H
#define FILE_SYSTEM_H

#include "FileSystemAbstraction.h"

#include <string>

// Win-API redifines these, which breaks things
#if defined(CreateDirectory)
	#undef CreateDirectory
#endif
#if defined(DeleteFile)
	#undef DeleteFile
#endif

/**
 * @brief filesystem interface
 *
 * Abstracts locating of content on different platforms.
 * Use this from the rest of the spring code, not FileSystemHandler!
 */
class FileSystem : public FileSystemAbstraction
{
public:

	/**
	 * @brief remove a file
	 *
	 * Operates on the current working directory.
	 */
	static bool Remove(std::string file);

	/**
	 * @brief Compares if 2 paths point to the same file/directory
	 *
	 */
	static bool ComparePaths(std::string path1, std::string path2);

	/// @name meta-data
	///@{
	/// Returns true if the file exists, and is not a directory
	static bool FileExists(std::string path);
	/**
	 * @brief get filesize
	 *
	 * @return the filesize or 0 if the file doesn't exist.
	 */
	static size_t GetFileSize(std::string path);
	///@}

	/// @name directory
	///@{
	/**
	 * @brief creates a directory recursively
	 *
	 * Works like mkdir -p, ie. attempts to create parent directories too.
	 * Operates on the current working directory.
	 * @return true if the postcondition of this function is that dir exists
	 *   in the write directory.
	 */
	static bool CreateDirectory(std::string dir);
	///@}


	static bool TouchFile(std::string filePath);

	/// @name convenience
	///@{
	/**
	 * @brief Returns the directory part of a path
	 * "/home/user/.spring/test.txt" -> "/home/user/.spring/"
	 * "test.txt" -> ""
	 */
	static std::string GetDirectory(const std::string& path);
	/**
	 * @brief Returns the filename part of a path
	 * "/home/user/.spring/test.txt" -> "test.txt"
	 */
	static std::string GetFilename(const std::string& path);
	/**
	 * @brief Returns the basename part of a path
	 * This is equvalent to the filename without extension.
	 * "/home/user/.spring/test.txt" -> "test"
	 */
	static std::string GetBasename(const std::string& path);
	/**
	 * @brief Returns the extension of the filename part of the path
	 * "/home/user/.spring/test.txt" -> "txt"
	 * "/home/user/.spring/test.txt..." -> "txt"
	 * "/home/user/.spring/test.txt. . ." -> "txt"
	 */
	static std::string GetExtension(const std::string& path);
	/**
	 * Converts the given path into a canonicalized one.
	 * CAUTION: be careful where using this, as it easily allows to link to
	 * outside a certain parent dir, for example a data-dir.
	 * @param path could be something like
	 *   "./symLinkToHome/foo/bar///./../test.log"
	 * @return with the example given in path, it could be
	 *   "./symLinkToHome/foo/test.log"
	 */
	static std::string GetNormalizedPath(const std::string& path);
	/**
	 * @brief Converts a glob expression to a regex
	 * @param glob string containing glob
	 * @return string containing regex
	 */
	static std::string ConvertGlobToRegex(const std::string& glob);
	/**
	 * Converts all slashes and backslashes in path to the
	 * native_path_separator.
	 */
	static std::string& FixSlashes(std::string& path);
	/**
	 * @brief converts backslashes in path to forward slashes
	 */
	static std::string& ForwardSlashes(std::string& path);
	///@}

	/**
	 * @brief does a little checking of a filename
	 */
	static bool CheckFile(const std::string& file);
//	static bool CheckDir(const std::string& dir) const;

	static const std::string& GetCacheBaseDir();
	static const std::string& GetCacheDir();
};

#endif // !FILE_SYSTEM_H