// // Copyright (c) 2008-2011, Kenneth Bell // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // using System; using System.IO; using DiscUtils.Streams; namespace DiscUtils { /// /// Common interface for all file systems. /// public interface IFileSystem { /// /// Gets a value indicating whether the file system is read-only or read-write. /// /// true if the file system is read-write. bool CanWrite { get; } /// /// Gets a value indicating whether the file system is thread-safe. /// bool IsThreadSafe { get; } /// /// Gets the root directory of the file system. /// DiscDirectoryInfo Root { get; } /// /// Copies an existing file to a new file. /// /// The source file. /// The destination file. void CopyFile(string sourceFile, string destinationFile); /// /// Copies an existing file to a new file, allowing overwriting of an existing file. /// /// The source file. /// The destination file. /// Whether to permit over-writing of an existing file. void CopyFile(string sourceFile, string destinationFile, bool overwrite); /// /// Creates a directory. /// /// The path of the new directory. void CreateDirectory(string path); /// /// Deletes a directory. /// /// The path of the directory to delete. void DeleteDirectory(string path); /// /// Deletes a directory, optionally with all descendants. /// /// The path of the directory to delete. /// Determines if the all descendants should be deleted. void DeleteDirectory(string path, bool recursive); /// /// Deletes a file. /// /// The path of the file to delete. void DeleteFile(string path); /// /// Indicates if a directory exists. /// /// The path to test. /// true if the directory exists. bool DirectoryExists(string path); /// /// Indicates if a file exists. /// /// The path to test. /// true if the file exists. bool FileExists(string path); /// /// Indicates if a file or directory exists. /// /// The path to test. /// true if the file or directory exists. bool Exists(string path); /// /// Gets the names of subdirectories in a specified directory. /// /// The path to search. /// Array of directories. string[] GetDirectories(string path); /// /// Gets the names of subdirectories in a specified directory matching a specified /// search pattern. /// /// The path to search. /// The search string to match against. /// Array of directories matching the search pattern. string[] GetDirectories(string path, string searchPattern); /// /// Gets the names of subdirectories in a specified directory matching a specified /// search pattern, using a value to determine whether to search subdirectories. /// /// The path to search. /// The search string to match against. /// Indicates whether to search subdirectories. /// Array of directories matching the search pattern. string[] GetDirectories(string path, string searchPattern, SearchOption searchOption); /// /// Gets the names of files in a specified directory. /// /// The path to search. /// Array of files. string[] GetFiles(string path); /// /// Gets the names of files in a specified directory. /// /// The path to search. /// The search string to match against. /// Array of files matching the search pattern. string[] GetFiles(string path, string searchPattern); /// /// Gets the names of files in a specified directory matching a specified /// search pattern, using a value to determine whether to search subdirectories. /// /// The path to search. /// The search string to match against. /// Indicates whether to search subdirectories. /// Array of files matching the search pattern. string[] GetFiles(string path, string searchPattern, SearchOption searchOption); /// /// Gets the names of all files and subdirectories in a specified directory. /// /// The path to search. /// Array of files and subdirectories matching the search pattern. string[] GetFileSystemEntries(string path); /// /// Gets the names of files and subdirectories in a specified directory matching a specified /// search pattern. /// /// The path to search. /// The search string to match against. /// Array of files and subdirectories matching the search pattern. string[] GetFileSystemEntries(string path, string searchPattern); /// /// Moves a directory. /// /// The directory to move. /// The target directory name. void MoveDirectory(string sourceDirectoryName, string destinationDirectoryName); /// /// Moves a file. /// /// The file to move. /// The target file name. void MoveFile(string sourceName, string destinationName); /// /// Moves a file, allowing an existing file to be overwritten. /// /// The file to move. /// The target file name. /// Whether to permit a destination file to be overwritten. void MoveFile(string sourceName, string destinationName, bool overwrite); /// /// Opens the specified file. /// /// The full path of the file to open. /// The file mode for the created stream. /// The new stream. SparseStream OpenFile(string path, FileMode mode); /// /// Opens the specified file. /// /// The full path of the file to open. /// The file mode for the created stream. /// The access permissions for the created stream. /// The new stream. SparseStream OpenFile(string path, FileMode mode, FileAccess access); /// /// Gets the attributes of a file or directory. /// /// The file or directory to inspect. /// The attributes of the file or directory. FileAttributes GetAttributes(string path); /// /// Sets the attributes of a file or directory. /// /// The file or directory to change. /// The new attributes of the file or directory. void SetAttributes(string path, FileAttributes newValue); /// /// Gets the creation time (in local time) of a file or directory. /// /// The path of the file or directory. /// The creation time. DateTime GetCreationTime(string path); /// /// Sets the creation time (in local time) of a file or directory. /// /// The path of the file or directory. /// The new time to set. void SetCreationTime(string path, DateTime newTime); /// /// Gets the creation time (in UTC) of a file or directory. /// /// The path of the file or directory. /// The creation time. DateTime GetCreationTimeUtc(string path); /// /// Sets the creation time (in UTC) of a file or directory. /// /// The path of the file or directory. /// The new time to set. void SetCreationTimeUtc(string path, DateTime newTime); /// /// Gets the last access time (in local time) of a file or directory. /// /// The path of the file or directory. /// The last access time. DateTime GetLastAccessTime(string path); /// /// Sets the last access time (in local time) of a file or directory. /// /// The path of the file or directory. /// The new time to set. void SetLastAccessTime(string path, DateTime newTime); /// /// Gets the last access time (in UTC) of a file or directory. /// /// The path of the file or directory. /// The last access time. DateTime GetLastAccessTimeUtc(string path); /// /// Sets the last access time (in UTC) of a file or directory. /// /// The path of the file or directory. /// The new time to set. void SetLastAccessTimeUtc(string path, DateTime newTime); /// /// Gets the last modification time (in local time) of a file or directory. /// /// The path of the file or directory. /// The last write time. DateTime GetLastWriteTime(string path); /// /// Sets the last modification time (in local time) of a file or directory. /// /// The path of the file or directory. /// The new time to set. void SetLastWriteTime(string path, DateTime newTime); /// /// Gets the last modification time (in UTC) of a file or directory. /// /// The path of the file or directory. /// The last write time. DateTime GetLastWriteTimeUtc(string path); /// /// Sets the last modification time (in UTC) of a file or directory. /// /// The path of the file or directory. /// The new time to set. void SetLastWriteTimeUtc(string path, DateTime newTime); /// /// Gets the length of a file. /// /// The path to the file. /// The length in bytes. long GetFileLength(string path); /// /// Gets an object representing a possible file. /// /// The file path. /// The representing object. /// The file does not need to exist. DiscFileInfo GetFileInfo(string path); /// /// Gets an object representing a possible directory. /// /// The directory path. /// The representing object. /// The directory does not need to exist. DiscDirectoryInfo GetDirectoryInfo(string path); /// /// Gets an object representing a possible file system object (file or directory). /// /// The file system path. /// The representing object. /// The file system object does not need to exist. DiscFileSystemInfo GetFileSystemInfo(string path); /// /// Reads the boot code of the file system into a byte array. /// /// The boot code, or null if not available. byte[] ReadBootCode(); /// /// Size of the Filesystem in bytes /// long Size { get; } /// /// Used space of the Filesystem in bytes /// long UsedSpace { get; } /// /// Available space of the Filesystem in bytes /// long AvailableSpace { get; } } }