xref: /ide/tools/previewer/util/FileSystem.cpp (revision 7c804472)
1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "FileSystem.h"
17
18#include <sys/stat.h>
19#include <unistd.h>
20
21#include "PreviewerEngineLog.h"
22#include "NativeFileSystem.h"
23
24std::vector<std::string> FileSystem::pathList = {"file_system", "app", "ace", "data"};
25std::string FileSystem::bundleName = "";
26std::string FileSystem::fileSystemPath = "";
27
28#ifdef _WIN32
29std::string FileSystem::separator = "\\";
30#else
31std::string FileSystem::separator = "/";
32#endif
33
34bool FileSystem::IsFileExists(std::string path)
35{
36    return S_ISREG(GetFileMode(path));
37}
38
39bool FileSystem::IsDirectoryExists(std::string path)
40{
41    return S_ISDIR(GetFileMode(path));
42}
43
44std::string FileSystem::GetApplicationPath()
45{
46    char appPath[MAX_PATH_LEN];
47    if (getcwd(appPath, MAX_PATH_LEN) == nullptr) {
48        ELOG("Get current path failed.");
49        return std::string();
50    }
51    std::string path(appPath);
52    return path;
53}
54
55const std::string& FileSystem::GetVirtualFileSystemPath()
56{
57    return fileSystemPath;
58}
59
60void FileSystem::MakeVirtualFileSystemPath()
61{
62    std::string dirToMake = GetApplicationPath();
63    if (!IsDirectoryExists(dirToMake)) {
64        ELOG("Application path is not exists.");
65        return;
66    }
67    for (std::string path : pathList) {
68        dirToMake += separator;
69        dirToMake += path;
70        MakeDir(dirToMake.data());
71    }
72    dirToMake += separator;
73    dirToMake += bundleName;
74    MakeDir(dirToMake);
75    fileSystemPath = dirToMake;
76}
77
78int FileSystem::MakeDir(std::string path)
79{
80    int result = 0;
81#ifdef _WIN32
82    result = mkdir(path.data());
83#else
84    result = mkdir(path.data(), S_IRUSR | S_IWUSR | S_IXUSR);
85#endif
86    return result;
87}
88
89void FileSystem::SetBundleName(std::string name)
90{
91    bundleName = name;
92}
93
94unsigned short FileSystem::GetFileMode(std::string path)
95{
96    struct stat info {};
97    if (stat(path.data(), &info) != 0) {
98        return 0;
99    }
100    return info.st_mode;
101}
102
103std::string FileSystem::GetSeparator()
104{
105    return separator;
106}
107
108std::string FileSystem::FindSubfolderByName(const std::string& parentFolderPath, const std::string& subfolderName)
109{
110    return OHOS::Ide::NativeFileSystem::FindSubfolderByName(parentFolderPath, subfolderName);
111}
112
113std::string FileSystem::NormalizePath(const std::string& path)
114{
115    std::string normalizedPath = path;
116    char separatorChar = FileSystem::separator[0]; // 0 is get fist char of string
117    for (char& c : normalizedPath) {
118        if (c == '/' || c == '\\') {
119            c = separatorChar;
120        }
121    }
122    return normalizedPath;
123}