/* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef RTC_BASE_FILE_H_ #define RTC_BASE_FILE_H_ #include #include #include "rtc_base/constructormagic.h" #include "rtc_base/pathutils.h" #include "rtc_base/platform_file.h" namespace rtc { // This class wraps the platform specific APIs for simple file interactions. // // The various read and write methods are best effort, i.e. if an underlying // call does not manage to read/write all the data more calls will be performed, // until an error is detected or all data is read/written. class File { public: // Wraps the given PlatformFile. This class is then responsible for closing // the file, which will be done in the destructor if Close is never called. explicit File(PlatformFile); // The default constructor produces a closed file. File(); ~File(); File(File&& other); File& operator=(File&& other); // Open and Create give files with both reading and writing enabled. static File Open(const std::string& path); static File Open(Pathname&& path); static File Open(const Pathname& path); // If the file already exists it will be overwritten. static File Create(const std::string& path); static File Create(Pathname&& path); static File Create(const Pathname& path); // Remove a file in the file system. static bool Remove(const std::string& path); static bool Remove(Pathname&& path); static bool Remove(const Pathname& path); size_t Write(const uint8_t* data, size_t length); size_t Read(uint8_t* buffer, size_t length); // The current position in the file after a call to these methods is platform // dependent (MSVC gives position offset+length, most other // compilers/platforms do not alter the position), i.e. do not depend on it, // do a Seek before any subsequent Read/Write. size_t WriteAt(const uint8_t* data, size_t length, size_t offset); size_t ReadAt(uint8_t* buffer, size_t length, size_t offset); // Attempt to position the file at the given offset from the start. // Returns true if successful, false otherwise. bool Seek(size_t offset); // Attempt to close the file. Returns true if successful, false otherwise, // most notably when the file is already closed. bool Close(); bool IsOpen(); private: PlatformFile file_; RTC_DISALLOW_COPY_AND_ASSIGN(File); }; } // namespace rtc #endif // RTC_BASE_FILE_H_