174 lines
5.2 KiB
C++
174 lines
5.2 KiB
C++
/*
|
|
* Copyright (c) 2021 Huawei Device Co., Ltd.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef DIRECTORY_EX_H
|
|
#define DIRECTORY_EX_H
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <sys/stat.h>
|
|
#ifdef UTILS_CXX_RUST
|
|
#include "cxx.h"
|
|
#endif
|
|
|
|
namespace OHOS {
|
|
|
|
#ifdef UTILS_CXX_RUST
|
|
rust::String RustGetCurrentProcFullFileName();
|
|
rust::String RustGetCurrentProcPath();
|
|
rust::String RustExtractFilePath(const rust::String& fileFullName);
|
|
rust::String RustExtractFileName(const rust::String& fileFullName);
|
|
rust::String RustExtractFileExt(const rust::String& fileName);
|
|
rust::String RustExcludeTrailingPathDelimiter(const rust::String& path);
|
|
rust::String RustIncludeTrailingPathDelimiter(const rust::String& path);
|
|
bool RustPathToRealPath(const rust::String& path, rust::String& realPath);
|
|
void RustGetDirFiles(const rust::String& path, rust::vec<rust::String>& files);
|
|
#endif
|
|
|
|
/**
|
|
* @brief Obtains the full absolute path of this program.
|
|
*
|
|
* <b>/proc/self/exe</b> indicates the program, and you can obtain its absolute
|
|
* path by using readlink().
|
|
*/
|
|
std::string GetCurrentProcFullFileName();
|
|
|
|
/**
|
|
* @brief Obtains the absolute path of this program.
|
|
*/
|
|
std::string GetCurrentProcPath();
|
|
|
|
/**
|
|
* @brief Obtains the path of a file based on the full path.
|
|
*/
|
|
std::string ExtractFilePath(const std::string& fileFullName);
|
|
|
|
/**
|
|
* @brief Obtains the name of a file based on the full path.
|
|
*/
|
|
std::string ExtractFileName(const std::string& fileFullName);
|
|
|
|
/**
|
|
* @brief Obtains the filename extension based on the full path.
|
|
*
|
|
*/
|
|
std::string ExtractFileExt(const std::string& fileName);
|
|
|
|
/**
|
|
* @brief Excludes the trailing path delimiter '/' from the <b>strPath</b>.
|
|
*
|
|
* If the path ends with '/', returns the path after removing '/'.
|
|
* Otherwise, returns the path directly.
|
|
*/
|
|
std::string ExcludeTrailingPathDelimiter(const std::string& path);
|
|
|
|
/**
|
|
* @brief Includes the trailing path delimiter '/' in the <b>strPath</b>.
|
|
*
|
|
* If the path ends with "/", returns the path.
|
|
* Otherwise, returns the path with an appended delimiter.
|
|
*/
|
|
std::string IncludeTrailingPathDelimiter(const std::string& path);
|
|
|
|
/**
|
|
* @brief Obtains the names of all files in the specified directory recursively.
|
|
*
|
|
* @param path Indicates the target directory.
|
|
* @param files Indicates the <b>std::vector</b> to store the file names.
|
|
*/
|
|
void GetDirFiles(const std::string& path, std::vector<std::string>& files);
|
|
|
|
/**
|
|
* @brief Checks whether a folder is empty.
|
|
*
|
|
* @return Returns <b>true</b> if the folder is empty;
|
|
* returns <b>false</b> otherwise.
|
|
*/
|
|
bool IsEmptyFolder(const std::string& path);
|
|
|
|
/**
|
|
* @brief Creates a directory recursively.
|
|
*
|
|
* The parent directory can be created at the same time when it does not exist.
|
|
*
|
|
* @note If there are errors such as 'Permission Denied', the creation may
|
|
* also fail.
|
|
* @return Returns <b>true</b> if the directory is created;
|
|
* returns <b>false</b> otherwise.
|
|
*/
|
|
bool ForceCreateDirectory(const std::string& path);
|
|
|
|
/**
|
|
* @brief Deletes a directory.
|
|
*
|
|
* All subdirectories and files in the specified directory will also be deleted.
|
|
*
|
|
* @note It is not necessarily successful to delete.
|
|
* @note If there are errors such as 'Permission Denied', the deletion may
|
|
* also fail.
|
|
* @return Returns <b>true</b> if the directory is deleted;
|
|
* returns <b>false</b> otherwise.
|
|
*/
|
|
bool ForceRemoveDirectory(const std::string& path);
|
|
|
|
/**
|
|
* @brief Removes the file specified by <b>fileName</b>.
|
|
*
|
|
* @return Returns <b>true</b> if the file is removed;
|
|
* returns <b>false</b> otherwise.
|
|
*/
|
|
bool RemoveFile(const std::string& fileName);
|
|
|
|
/**
|
|
* @brief Obtains the folder size, in bytes.
|
|
*/
|
|
uint64_t GetFolderSize(const std::string& path);
|
|
|
|
/**
|
|
* @brief Changes the access permissions on a file.
|
|
*
|
|
* @param mode Indicates the permissions on the file.
|
|
* For details, see <b>chmod()</b>.
|
|
* @return Returns <b>true</b> if the permissions are changed;
|
|
* returns <b>false</b> otherwise.
|
|
*/
|
|
bool ChangeModeFile(const std::string& fileName, const mode_t& mode);
|
|
|
|
/**
|
|
* @brief Changes the access permissions on a directory and all its
|
|
* subdirectories.
|
|
*
|
|
* @param mode Indicates the permissions. For details, see <b>chmod()</b>.
|
|
* @return Returns <b>true</b> if the permissions are changed;
|
|
* returns <b>false</b> otherwise.
|
|
*/
|
|
bool ChangeModeDirectory(const std::string& path, const mode_t& mode);
|
|
|
|
/**
|
|
* @brief Obtains the real path from a relative path.
|
|
*
|
|
* @return Returns <b>true</b> if the real path is obtained;
|
|
* returns <b>false</b> otherwise.
|
|
*/
|
|
bool PathToRealPath(const std::string& path, std::string& realPath);
|
|
|
|
#if defined(IOS_PLATFORM) || defined(_WIN32)
|
|
/**
|
|
* @brief Transforms a file name to that for Windows or macOS.
|
|
*/
|
|
std::string TransformFileName(const std::string& fileName);
|
|
#endif
|
|
} // OHOS
|
|
#endif |