SuperDesign/Source/开发辅助工具/Tools/SmartEditor/MyFileSystemInfo.cs
鑫Intel 03bcb8c5fd ### 2023-02-21更新
------
#### SuperDesign    V3.0.2302.2101
- *.[新增]全新文本编辑器,支持高亮、FTP查看和编辑、目录浏览,历史版本等众多功能。
2023-02-21 09:46:13 +08:00

108 lines
3.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SuperDesign.Tools.SmartEditor
{
public class MyFileSystemInfo : IEquatable<MyFileSystemInfo>
{
public MyFileSystemInfo(FileSystemInfo fileSystemInfo,string name)
{
if (fileSystemInfo == null) throw new ArgumentNullException("fileSystemInfo");
this.info = fileSystemInfo;
if (name.Length == 0)
{
this.Name = info.Name;
}
else { this.Name = name; }
}
public bool IsDirectory { get { return this.AsDirectory != null; } }
public DirectoryInfo AsDirectory { get { return this.info as DirectoryInfo; } }
public FileInfo AsFile { get { return this.info as FileInfo; } }
private readonly FileSystemInfo info;
public string Name
{
get; set;
} = "";
public string Extension
{
get { return this.info.Extension; }
}
public DateTime LastWriteTime
{
get { return this.info.LastWriteTime; }
}
public DateTime CreationTime
{
get { return this.info.CreationTime; }
}
public string FullName
{
get { return this.info.FullName; }
}
public FileAttributes Attributes
{
get { return this.info.Attributes; }
}
public long Length
{
get { return this.AsFile.Length; }
}
public IEnumerable GetFileSystemInfos()
{
ArrayList children = new ArrayList();
if (this.IsDirectory)
{
foreach(var x in this.AsDirectory.GetDirectories())
{
children.Add(new MyFileSystemInfo(x, ""));
}
foreach (var x in this.AsDirectory.GetFiles())
{
children.Add(new MyFileSystemInfo(x, ""));
}
}
return children;
}
// Two file system objects are equal if they point to the same file system path
public bool Equals(MyFileSystemInfo other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Equals(other.info.FullName, this.info.FullName);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof(MyFileSystemInfo)) return false;
return Equals((MyFileSystemInfo)obj);
}
public override int GetHashCode()
{
return (this.info != null ? this.info.FullName.GetHashCode() : 0);
}
public static bool operator ==(MyFileSystemInfo left, MyFileSystemInfo right)
{
return Equals(left, right);
}
public static bool operator !=(MyFileSystemInfo left, MyFileSystemInfo right)
{
return !Equals(left, right);
}
}
}