// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_FML_FILE_H_ #define FLUTTER_FML_FILE_H_ #include #include #include #include "flutter/fml/macros.h" #include "flutter/fml/unique_fd.h" #ifdef ERROR #undef ERROR #endif namespace fml { class Mapping; enum class FilePermission { kRead, kWrite, kReadWrite, }; std::string CreateTemporaryDirectory(); fml::UniqueFD OpenFile(const char* path, bool create_if_necessary, FilePermission permission); fml::UniqueFD OpenFile(const fml::UniqueFD& base_directory, const char* path, bool create_if_necessary, FilePermission permission); fml::UniqueFD OpenDirectory(const char* path, bool create_if_necessary, FilePermission permission); fml::UniqueFD OpenDirectory(const fml::UniqueFD& base_directory, const char* path, bool create_if_necessary, FilePermission permission); fml::UniqueFD Duplicate(fml::UniqueFD::element_type descriptor); bool IsDirectory(const fml::UniqueFD& directory); // Returns whether the given path is a file. bool IsFile(const std::string& path); bool TruncateFile(const fml::UniqueFD& file, size_t size); bool FileExists(const fml::UniqueFD& base_directory, const char* path); bool UnlinkDirectory(const char* path); bool UnlinkDirectory(const fml::UniqueFD& base_directory, const char* path); bool UnlinkFile(const char* path); bool UnlinkFile(const fml::UniqueFD& base_directory, const char* path); fml::UniqueFD CreateDirectory(const fml::UniqueFD& base_directory, const std::vector& components, FilePermission permission); bool WriteAtomically(const fml::UniqueFD& base_directory, const char* file_name, const Mapping& mapping); class ScopedTemporaryDirectory { public: ScopedTemporaryDirectory(); ~ScopedTemporaryDirectory(); const UniqueFD& fd() { return dir_fd_; } private: std::string path_; UniqueFD dir_fd_; }; } // namespace fml #endif // FLUTTER_FML_FILE_H_