ArmNN
 25.11
Loading...
Searching...
No Matches
Filesystem.cpp
Go to the documentation of this file.
1//
2// Copyright © 2020,2023 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#if !defined(ARMNN_DISABLE_FILESYSTEM)
6
9
10namespace armnnUtils
11{
12namespace Filesystem
13{
14
15/**
16 * @brief Construct a temporary file name.
17 *
18 * Given a specified file name construct a path to that file in the
19 * system temporary directory. If the file already exists it is deleted. This
20 * could throw filesystem_error exceptions.
21 *
22 * @param fileName the file name required in the temporary directory.
23 * @return path consisting of system temporary directory and file name.
24 */
25fs::path NamedTempFile(const char* fileName)
26{
27 fs::path tmpDir = fs::temp_directory_path();
28 fs::path namedTempFile{tmpDir / fileName};
29 if (fs::exists(namedTempFile))
30 {
31 fs::remove(namedTempFile);
32 }
33 return namedTempFile;
34}
35
36/**
37 * @brief Construct a temporary directory
38 *
39 * Given a specified directory name construct a path in the
40 * system temporary directory. If the directory already exists, it is deleted,
41 * otherwise create it. This could throw filesystem_error exceptions.
42 *
43 * @param path is the path required in the temporary directory.
44 * @return path consisting of system temporary directory.
45 * @throws RuntimeException if the directory cannot be created or exists but cannot be removed.
46 */
47std::string CreateDirectory(std::string path)
48{
49 // This line is very unlikely to throw an exception.
50 fs::path tmpDir = fs::temp_directory_path();
51 std::string full_path = tmpDir.generic_string() + path;
52 // This could throw a file permission exception.
54#if defined(_WIN32)
55 result = _mkdir(full_path.c_str()); // can be used on Windows
56 armnn::ConditionalThrow<armnn::RuntimeException>((result == 0), "Was unable to create temporary directory");
57#else
58 try
59 {
60 if(!fs::create_directory(full_path))
61 {
62 throw armnn::RuntimeException("Unable to create directory: " + full_path);
63 }
64 }
65 catch (const std::system_error& e)
66 {
67 std::string error = "Unable to create directory. Reason: ";
68 error.append(e.what());
70 }
71#endif
72
73 return full_path + "/";
74}
75
76/**
77 * @brief Remove a directory and its contents.
78 *
79 * Given a directory path delete it's contents and the directory. If the specified directory doesn't exist this
80 * does nothing. If any item cannot be removed this will throw a RuntimeException.
81 *
82 * @param full_path
83 */
84void RemoveDirectoryAndContents(const std::string& path)
85{
86 if (fs::exists(path))
87 {
88 try
89 {
90 // This could throw an exception on a multi-user system.
91 fs::remove_all(path);
92 }
93 catch (const std::system_error& e)
94 {
95 std::string error = "Directory exists and cannot be removed. Reason: ";
96 error.append(e.what());
98 }
99 }
100}
101
102FileContents ReadFileContentsIntoString(const std::string& path) {
103 if (!fs::exists(path))
104 {
105 throw armnn::RuntimeException("Path does not exist: " + path);
106 }
107 std::ifstream input_file(path);
108 armnn::ConditionalThrow<armnn::RuntimeException>((input_file.is_open()), "Could not read file contents");
109 return FileContents((std::istreambuf_iterator<char>(input_file)), std::istreambuf_iterator<char>());
110}
111
112} // namespace armnnUtils
113} // namespace Filesystem
114
115#endif // !defined(ARMNN_DISABLE_FILESYSTEM)
void ConditionalThrow(bool condition, const std::string &message)
std::string CreateDirectory(std::string sPath)
Returns full path to temporary folder.
FileContents ReadFileContentsIntoString(const std::string &path)
fs::path NamedTempFile(const char *fileName)
Returns a path to a file in the system temporary folder. If the file existed it will be deleted.
void RemoveDirectoryAndContents(const std::string &path)
Remove a directory and its contents.