Diligent Engine  v.2.4.g
Win32FileSystem.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019-2021 Diligent Graphics LLC
3  * Copyright 2015-2019 Egor Yusov
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * In no event and under no legal theory, whether in tort (including negligence),
18  * contract, or otherwise, unless required by applicable law (such as deliberate
19  * and grossly negligent acts) or agreed to in writing, shall any Contributor be
20  * liable for any damages, including any direct, indirect, special, incidental,
21  * or consequential damages of any character arising as a result of this License or
22  * out of the use or inability to use the software (including but not limited to damages
23  * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
24  * all other commercial damages or losses), even if such Contributor has been advised
25  * of the possibility of such damages.
26  */
27 
28 #pragma once
29 
30 #include <memory>
31 #include "../../Basic/interface/BasicFileSystem.hpp"
32 #include "../../Basic/interface/StandardFile.hpp"
33 #include "../../../Primitives/interface/FlagEnum.h"
34 
35 class WindowsFile : public StandardFile
36 {
37 public:
38  WindowsFile(const FileOpenAttribs& OpenAttribs);
39 };
40 
42 {
44 
48 
51 
55 
58 };
60 
62 {
65 };
66 
68 {
71 
72  const char* Title = nullptr;
73  const char* Filter = nullptr;
74 
75  FileDialogAttribs() noexcept {}
76 
77  explicit FileDialogAttribs(FILE_DIALOG_TYPE _Type) noexcept :
78  Type{_Type}
79  {
80  switch (Type)
81  {
84  break;
85 
88  break;
89  }
90  }
91 };
92 
94 {
95 public:
96  static WindowsFile* OpenFile(const FileOpenAttribs& OpenAttribs);
97 
98  static inline Diligent::Char GetSlashSymbol() { return '\\'; }
99 
100  static bool FileExists(const Diligent::Char* strFilePath);
101  static bool PathExists(const Diligent::Char* strPath);
102 
103  static bool CreateDirectory(const Diligent::Char* strPath);
104  static void ClearDirectory(const Diligent::Char* strPath, bool Recursive = false);
105  static void DeleteFile(const Diligent::Char* strPath);
106  static void DeleteDirectory(const Diligent::Char* strPath);
107  static bool IsDirectory(const Diligent::Char* strPath);
108 
109  static std::vector<std::unique_ptr<FindFileData>> Search(const Diligent::Char* SearchPattern);
110 
111  static std::string FileDialog(const FileDialogAttribs& DialogAttribs);
112 
113  static std::string GetCurrentDirectory();
114 
115 
117 
131  static bool GetRelativePath(const Diligent::Char* strPathFrom,
132  bool IsFromDirectory,
133  const Diligent::Char* strPathTo,
134  bool IsToDirectory,
135  std::string& RelativePath);
136 };
FileDialogAttribs::Type
FILE_DIALOG_TYPE Type
Definition: Win32FileSystem.hpp:69
WindowsFileSystem::GetCurrentDirectory
static std::string GetCurrentDirectory()
Definition: Win32FileSystem.cpp:53
WindowsFileSystem::PathExists
static bool PathExists(const Diligent::Char *strPath)
Definition: Win32FileSystem.cpp:231
Diligent::Char
char Char
Definition: BasicTypes.h:64
WindowsFileSystem::DeleteFile
static void DeleteFile(const Diligent::Char *strPath)
Definition: Win32FileSystem.cpp:46
FileOpenAttribs
Definition: BasicFileSystem.hpp:48
FILE_DIALOG_FLAG_NO_CHANGE_DIR
@ FILE_DIALOG_FLAG_NO_CHANGE_DIR
Restores the current directory to its original value if the user changed the directory while searchin...
Definition: Win32FileSystem.hpp:54
FileDialogAttribs::Title
const char * Title
Definition: Win32FileSystem.hpp:72
FILE_DIALOG_TYPE_SAVE
@ FILE_DIALOG_TYPE_SAVE
Definition: Win32FileSystem.hpp:64
FileDialogAttribs::FileDialogAttribs
FileDialogAttribs() noexcept
Definition: Win32FileSystem.hpp:75
FILE_DIALOG_FLAG_OVERWRITE_PROMPT
@ FILE_DIALOG_FLAG_OVERWRITE_PROMPT
Causes the Save As dialog box to show a message box if the selected file already exists.
Definition: Win32FileSystem.hpp:57
StandardFile
Definition: StandardFile.hpp:35
WindowsFileSystem::IsDirectory
static bool IsDirectory(const Diligent::Char *strPath)
Definition: Win32FileSystem.cpp:330
WindowsFileSystem::ClearDirectory
static void ClearDirectory(const Diligent::Char *strPath, bool Recursive=false)
Definition: Win32FileSystem.cpp:157
WindowsFileSystem::OpenFile
static WindowsFile * OpenFile(const FileOpenAttribs &OpenAttribs)
Definition: Win32FileSystem.cpp:107
WindowsFileSystem::GetRelativePath
static bool GetRelativePath(const Diligent::Char *strPathFrom, bool IsFromDirectory, const Diligent::Char *strPathTo, bool IsToDirectory, std::string &RelativePath)
Returns a relative path from one file or folder to another.
Definition: Win32FileSystem.cpp:361
FILE_DIALOG_FLAG_FILE_MUST_EXIST
@ FILE_DIALOG_FLAG_FILE_MUST_EXIST
Only existing files can be opened.
Definition: Win32FileSystem.hpp:50
FILE_DIALOG_TYPE
FILE_DIALOG_TYPE
Definition: Win32FileSystem.hpp:61
WindowsFileSystem::GetSlashSymbol
static Diligent::Char GetSlashSymbol()
Definition: Win32FileSystem.hpp:98
WindowsFileSystem::DeleteDirectory
static void DeleteDirectory(const Diligent::Char *strPath)
Definition: Win32FileSystem.cpp:220
WindowsFileSystem::FileExists
static bool FileExists(const Diligent::Char *strFilePath)
Definition: Win32FileSystem.cpp:121
BasicFileSystem
Definition: BasicFileSystem.hpp:82
Diligent::Uint32
uint32_t Uint32
32-bit unsigned integer
Definition: BasicTypes.h:51
WindowsFileSystem::Search
static std::vector< std::unique_ptr< FindFileData > > Search(const Diligent::Char *SearchPattern)
Definition: Win32FileSystem.cpp:248
WindowsFile
Definition: Win32FileSystem.hpp:35
WindowsFile::WindowsFile
WindowsFile(const FileOpenAttribs &OpenAttribs)
Definition: Win32FileSystem.cpp:74
FILE_DIALOG_FLAGS
FILE_DIALOG_FLAGS
Definition: Win32FileSystem.hpp:41
WindowsFileSystem::FileDialog
static std::string FileDialog(const FileDialogAttribs &DialogAttribs)
Definition: Win32FileSystem.cpp:310
FILE_DIALOG_FLAG_DONT_ADD_TO_RECENT
@ FILE_DIALOG_FLAG_DONT_ADD_TO_RECENT
Prevents the system from adding a link to the selected file in the file system directory that contain...
Definition: Win32FileSystem.hpp:47
FileDialogAttribs
Definition: Win32FileSystem.hpp:67
FileDialogAttribs::FileDialogAttribs
FileDialogAttribs(FILE_DIALOG_TYPE _Type) noexcept
Definition: Win32FileSystem.hpp:77
DEFINE_FLAG_ENUM_OPERATORS
DEFINE_FLAG_ENUM_OPERATORS(FILE_DIALOG_FLAGS)
FILE_DIALOG_FLAG_NONE
@ FILE_DIALOG_FLAG_NONE
Definition: Win32FileSystem.hpp:43
WindowsFileSystem::CreateDirectory
static bool CreateDirectory(const Diligent::Char *strPath)
Definition: Win32FileSystem.cpp:39
FileDialogAttribs::Flags
FILE_DIALOG_FLAGS Flags
Definition: Win32FileSystem.hpp:70
FileDialogAttribs::Filter
const char * Filter
Definition: Win32FileSystem.hpp:73
WindowsFileSystem
Definition: Win32FileSystem.hpp:93
FILE_DIALOG_TYPE_OPEN
@ FILE_DIALOG_TYPE_OPEN
Definition: Win32FileSystem.hpp:63