重构虚拟文件系统
parent
1692f02643
commit
e28547e01f
|
@ -4,17 +4,19 @@ namespace ZXLT.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class DirectoryInfo : FileSystemInfo
|
public sealed class DirectoryInfo : FileSystemInfo
|
||||||
{
|
{
|
||||||
List<DirectoryInfo> directories = new List<DirectoryInfo>();
|
// List<DirectoryInfo> directories = new List<DirectoryInfo>();
|
||||||
List<FileInfo> files = new List<FileInfo>();
|
// List<FileInfo> files = new List<FileInfo>();
|
||||||
|
|
||||||
public override bool Exists { get; }
|
public override bool Exists { get; }
|
||||||
public override string Name => _name;
|
public override string Name => _name;
|
||||||
|
public override FileSystemInfoType FileSystemInfoType { get; }
|
||||||
|
|
||||||
public DirectoryInfo Parent
|
public DirectoryInfo Parent
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var directoryInfo = new DirectoryInfo(System.IO.Path.GetDirectoryName(FullPath));
|
var parentPath = FullPath.Split("\\")[^1];
|
||||||
|
var directoryInfo = new DirectoryInfo(System.IO.Path.GetFullPath(parentPath));
|
||||||
return directoryInfo;
|
return directoryInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,28 +25,18 @@ namespace ZXLT.FileSystem
|
||||||
|
|
||||||
public DirectoryInfo(string path)
|
public DirectoryInfo(string path)
|
||||||
{
|
{
|
||||||
this.Init(path, System.IO.Path.GetFullPath(path), isNormalized: true);
|
FullPath = System.IO.Path.GetFullPath(path);
|
||||||
FullPath = path;
|
_name = System.IO.Path.GetDirectoryName(path);
|
||||||
_name = path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Init(string originalPath, string fullPath = null, string fileName = null, bool isNormalized = false)
|
// public DirectoryInfo[] GetDirectories()
|
||||||
{
|
// {
|
||||||
if (fullPath == null)
|
// return directories.ToArray();
|
||||||
fullPath = originalPath;
|
// }
|
||||||
fullPath = isNormalized ? fullPath : System.IO.Path.GetFullPath(fullPath);
|
//
|
||||||
this._name = fileName;
|
// public FileInfo[] GetFiles()
|
||||||
this.FullPath = fullPath;
|
// {
|
||||||
}
|
// return files.ToArray();
|
||||||
|
// }
|
||||||
public DirectoryInfo[] GetDirectories()
|
|
||||||
{
|
|
||||||
return directories.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public FileInfo[] GetFiles()
|
|
||||||
{
|
|
||||||
return files.ToArray();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -5,9 +5,10 @@ namespace ZXLT.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class FileInfo : FileSystemInfo
|
public sealed class FileInfo : FileSystemInfo
|
||||||
{
|
{
|
||||||
public string Extension { get; }
|
public string Extension => Path.GetExtension(this.FullName);
|
||||||
public override bool Exists { get; }
|
public override bool Exists { get; }
|
||||||
public override string Name => _name;
|
public override string Name => _name;
|
||||||
|
public override FileSystemInfoType FileSystemInfoType { get; }
|
||||||
public string? DirectoryName => Path.GetDirectoryName(this.FullPath);
|
public string? DirectoryName => Path.GetDirectoryName(this.FullPath);
|
||||||
|
|
||||||
public DirectoryInfo Directory
|
public DirectoryInfo Directory
|
||||||
|
@ -20,16 +21,11 @@ namespace ZXLT.FileSystem
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileInfo(string fileName)
|
public FileInfo(string fileName)
|
||||||
: this(fileName ?? throw new ArgumentNullException(nameof(fileName)), (string)null, (string)null, false)
|
|
||||||
{
|
{
|
||||||
}
|
fileName = fileName ?? throw new ArgumentNullException(nameof(fileName));
|
||||||
|
_name = Path.GetFileName(fileName);
|
||||||
internal FileInfo(string originalPath, string fullPath = null, string fileName = null, bool isNormalized = false)
|
this.FullPath = Path.GetFullPath(fileName);
|
||||||
{
|
FileSystemInfoType = FileSystemInfoType.File;
|
||||||
if (fullPath == null)
|
|
||||||
fullPath = originalPath;
|
|
||||||
this.FullPath = isNormalized ? fullPath ?? originalPath : Path.GetFullPath(fullPath);
|
|
||||||
this._name = fileName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,126 @@
|
||||||
namespace ZXLT.FileSystem
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using ZXL.Helper;
|
||||||
|
|
||||||
|
namespace ZXLT.FileSystem
|
||||||
{
|
{
|
||||||
public class FileSystem
|
class FileBase
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
class Directory : FileBase
|
||||||
|
{
|
||||||
|
DirectoryInfo directoryInfo;
|
||||||
|
|
||||||
|
List<Directory> directories = new List<Directory>();
|
||||||
|
List<File> files = new List<File>();
|
||||||
|
|
||||||
|
public Directory(DirectoryInfo directoryInfo)
|
||||||
|
{
|
||||||
|
this.directoryInfo = directoryInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddDirectory(Directory dir)
|
||||||
|
{
|
||||||
|
directories.Add(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddFile(File file)
|
||||||
|
{
|
||||||
|
files.Add(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveDirectory(Directory dir)
|
||||||
|
{
|
||||||
|
directories.Remove(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveFile(File file)
|
||||||
|
{
|
||||||
|
files.Remove(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
directories.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class File : FileBase
|
||||||
|
{
|
||||||
|
FileInfo fileInfo;
|
||||||
|
|
||||||
|
public File(FileInfo fileInfo)
|
||||||
|
{
|
||||||
|
this.fileInfo = fileInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IFileSystem
|
||||||
|
{
|
||||||
|
event Action<FileSystemInfo> OnUpdateFileSystem;
|
||||||
|
void CreateDirectory(string path);
|
||||||
|
void DeleteDirectory(string path);
|
||||||
|
void DeleteFile(string path);
|
||||||
|
void MoveDirectory(string sourcePath, string destPath);
|
||||||
|
void MoveFile(string sourcePath, string destPath);
|
||||||
|
void RenameDirectory(string sourcePath, string destPath);
|
||||||
|
void RenameFile(string sourcePath, string destPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FileSystem : IFileSystem
|
||||||
|
{
|
||||||
|
Directory rootDirectory;
|
||||||
|
SortedDictionary<string, FileBase> fileBases = new SortedDictionary<string, FileBase>();
|
||||||
|
public event Action<FileSystemInfo> OnUpdateFileSystem;
|
||||||
|
|
||||||
|
void UpdateFileSystem(FileSystemInfo systemInfo)
|
||||||
|
{
|
||||||
|
OnUpdateFileSystem?.Invoke(systemInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateDirectory(string path)
|
||||||
|
{
|
||||||
|
var directory = new Directory(new DirectoryInfo(path));
|
||||||
|
fileBases.Add(path, directory);
|
||||||
|
FileHelper.CreateDirectory(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateFile(string path)
|
||||||
|
{
|
||||||
|
var file = new File(new FileInfo(path));
|
||||||
|
fileBases.Add(path, file);
|
||||||
|
FileHelper.CreateDirectory(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteDirectory(string path)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteFile(string path)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MoveDirectory(string sourcePath, string destPath)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MoveFile(string sourcePath, string destPath)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RenameDirectory(string sourcePath, string destPath)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RenameFile(string sourcePath, string destPath)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,13 +2,20 @@
|
||||||
|
|
||||||
namespace ZXLT.FileSystem
|
namespace ZXLT.FileSystem
|
||||||
{
|
{
|
||||||
|
public enum FileSystemInfoType
|
||||||
|
{
|
||||||
|
File,
|
||||||
|
Directory,
|
||||||
|
}
|
||||||
|
|
||||||
public abstract class FileSystemInfo
|
public abstract class FileSystemInfo
|
||||||
{
|
{
|
||||||
protected string _name;
|
protected string _name;
|
||||||
protected string FullPath;
|
protected string FullPath;
|
||||||
public DateTime CreationTime { get; set; }
|
public DateTime CreationTime { get; }
|
||||||
public abstract bool Exists { get; }
|
public abstract bool Exists { get; }
|
||||||
public abstract string Name { get; }
|
public abstract string Name { get; }
|
||||||
public virtual string FullName => FullPath;
|
public virtual string FullName => FullPath;
|
||||||
|
public abstract FileSystemInfoType FileSystemInfoType { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue