//
// 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; }
}
}