| 1 | // LAF Base Library | 
|---|
| 2 | // Copyright (c) 2020-2021 Igara Studio S.A. | 
|---|
| 3 | // Copyright (c) 2001-2018 David Capello | 
|---|
| 4 | // | 
|---|
| 5 | // This file is released under the terms of the MIT license. | 
|---|
| 6 | // Read LICENSE.txt for more information. | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef BASE_FS_H_INCLUDED | 
|---|
| 9 | #define BASE_FS_H_INCLUDED | 
|---|
| 10 | #pragma once | 
|---|
| 11 |  | 
|---|
| 12 | #include <string> | 
|---|
| 13 |  | 
|---|
| 14 | #include "base/paths.h" | 
|---|
| 15 |  | 
|---|
| 16 | namespace base { | 
|---|
| 17 |  | 
|---|
| 18 | class Time; | 
|---|
| 19 |  | 
|---|
| 20 | // Default path separator (on Windows it is '\' and on Unix-like systems it is '/'). | 
|---|
| 21 | extern const std::string::value_type path_separator; | 
|---|
| 22 |  | 
|---|
| 23 | bool is_file(const std::string& path); | 
|---|
| 24 | bool is_directory(const std::string& path); | 
|---|
| 25 |  | 
|---|
| 26 | size_t file_size(const std::string& path); | 
|---|
| 27 |  | 
|---|
| 28 | void move_file(const std::string& src, const std::string& dst); | 
|---|
| 29 | void copy_file(const std::string& src, const std::string& dst, bool overwrite); | 
|---|
| 30 | void delete_file(const std::string& path); | 
|---|
| 31 |  | 
|---|
| 32 | bool has_readonly_attr(const std::string& path); | 
|---|
| 33 | void remove_readonly_attr(const std::string& path); | 
|---|
| 34 |  | 
|---|
| 35 | Time get_modification_time(const std::string& path); | 
|---|
| 36 |  | 
|---|
| 37 | void make_directory(const std::string& path); | 
|---|
| 38 | void make_all_directories(const std::string& path); | 
|---|
| 39 | void remove_directory(const std::string& path); | 
|---|
| 40 |  | 
|---|
| 41 | std::string get_current_path(); | 
|---|
| 42 | std::string get_app_path(); | 
|---|
| 43 | std::string get_temp_path(); | 
|---|
| 44 | std::string get_user_docs_folder(); | 
|---|
| 45 | #if __APPLE__ | 
|---|
| 46 | std::string get_lib_app_support_path(); | 
|---|
| 47 | #endif | 
|---|
| 48 |  | 
|---|
| 49 | // If the given filename is a relative path, it converts the | 
|---|
| 50 | // filename to an absolute one. | 
|---|
| 51 | std::string get_canonical_path(const std::string& path); | 
|---|
| 52 |  | 
|---|
| 53 | // TODO why get_canonical_path() is not enough? | 
|---|
| 54 | std::string get_absolute_path(const std::string& filename); | 
|---|
| 55 |  | 
|---|
| 56 | paths list_files(const std::string& path); | 
|---|
| 57 |  | 
|---|
| 58 | // Returns true if the given character is a valud path separator | 
|---|
| 59 | // (any of '\' or '/' characters). | 
|---|
| 60 | bool is_path_separator(std::string::value_type chr); | 
|---|
| 61 |  | 
|---|
| 62 | // Returns only the path (without the last trailing slash). | 
|---|
| 63 | std::string get_file_path(const std::string& filename); | 
|---|
| 64 |  | 
|---|
| 65 | // Returns the file name with its extension, removing the path. | 
|---|
| 66 | std::string get_file_name(const std::string& filename); | 
|---|
| 67 |  | 
|---|
| 68 | // Returns the extension of the file name (without the dot). | 
|---|
| 69 | std::string get_file_extension(const std::string& filename); | 
|---|
| 70 |  | 
|---|
| 71 | // Returns the whole path with another extension. | 
|---|
| 72 | std::string replace_extension(const std::string& filename, const std::string& extension); | 
|---|
| 73 |  | 
|---|
| 74 | // Returns the file name without path and without extension. | 
|---|
| 75 | std::string get_file_title(const std::string& filename); | 
|---|
| 76 | std::string get_file_title_with_path(const std::string& filename); | 
|---|
| 77 |  | 
|---|
| 78 | // Joins two paths or a path and a file name with a path-separator. | 
|---|
| 79 | std::string join_path(const std::string& path, const std::string& file); | 
|---|
| 80 |  | 
|---|
| 81 | // Removes the trailing separator from the given path. | 
|---|
| 82 | std::string remove_path_separator(const std::string& path); | 
|---|
| 83 |  | 
|---|
| 84 | // Replaces all separators with the system separator. | 
|---|
| 85 | std::string fix_path_separators(const std::string& filename); | 
|---|
| 86 |  | 
|---|
| 87 | // Calls get_canonical_path() and fix_path_separators() for the | 
|---|
| 88 | // given filename. | 
|---|
| 89 | std::string normalize_path(const std::string& filename); | 
|---|
| 90 |  | 
|---|
| 91 | // Returns true if the filename contains one of the specified | 
|---|
| 92 | // extensions. The "extensions" parameter must be a set of possible | 
|---|
| 93 | // extensions. | 
|---|
| 94 | bool has_file_extension(const std::string& filename, const base::paths& extensions); | 
|---|
| 95 |  | 
|---|
| 96 | int compare_filenames(const std::string& a, const std::string& b); | 
|---|
| 97 |  | 
|---|
| 98 | #if LAF_WINDOWS | 
|---|
| 99 | class Version; | 
|---|
| 100 | Version get_file_version(const std::string& filename); | 
|---|
| 101 | Version get_file_version(const wchar_t* filename); | 
|---|
| 102 | #endif | 
|---|
| 103 |  | 
|---|
| 104 | } // namespace base | 
|---|
| 105 |  | 
|---|
| 106 | #endif | 
|---|
| 107 |  | 
|---|