#import NS_ASSUME_NONNULL_BEGIN // Use instead of NSTemporaryDirectory() // prefer the more restrictice OWSTemporaryDirectory, // unless the temp data may need to be accessed while the device is locked. NSString *OWSTemporaryDirectory(void); NSString *OWSTemporaryDirectoryAccessibleAfterFirstAuth(void); void ClearOldTemporaryDirectories(void); void ClearOldTemporaryDirectoriesSync(void); @interface OWSFileSystem : NSObject - (instancetype)init NS_UNAVAILABLE; + (BOOL)protectFileOrFolderAtPath:(NSString *)path; + (BOOL)protectFileOrFolderAtPath:(NSString *)path fileProtectionType:(NSFileProtectionType)fileProtectionType; + (BOOL)protectRecursiveContentsAtPath:(NSString *)path; + (NSString *)appDocumentDirectoryPath; + (NSString *)appLibraryDirectoryPath; + (NSString *)appSharedDataDirectoryPath; + (NSString *)cachesDirectoryPath; + (nullable NSError *)renameFilePathUsingRandomExtension:(NSString *)oldFilePath; + (nullable NSError *)moveAppFilePath:(NSString *)oldFilePath sharedDataFilePath:(NSString *)newFilePath; // Returns NO IFF the directory does not exist and could not be created. + (BOOL)ensureDirectoryExists:(NSString *)dirPath; + (BOOL)ensureFileExists:(NSString *)filePath; + (BOOL)deleteFile:(NSString *)filePath; + (BOOL)deleteFileIfExists:(NSString *)filePath; + (NSArray *_Nullable)allFilesInDirectoryRecursive:(NSString *)dirPath error:(NSError **)error; + (NSString *)temporaryFilePath; + (NSString *)temporaryFilePathWithFileExtension:(NSString *_Nullable)fileExtension; // Returns nil on failure. + (nullable NSString *)writeDataToTemporaryFile:(NSData *)data fileExtension:(NSString *_Nullable)fileExtension; + (nullable NSNumber *)fileSizeOfPath:(NSString *)filePath; @end NS_ASSUME_NONNULL_END