using System; using System.Collections.Generic; using System.IO; namespace ScreenConnect; public abstract class FileData : IReadStreamProducer, IDisposable { public abstract string FilePath { get; } public abstract long Size { get; } public abstract DateTime CreationTime { get; } public abstract DateTime LastWriteTime { get; } public abstract DateTime LastAccessTime { get; } public abstract bool IsDirectory { get; } public abstract Stream OpenReadStream(); public abstract void Dispose(); public static FileData GetFileData(string path) { FileData[] fileDatas = GetFileDatas(path); if (fileDatas.Length != 1) { throw new InvalidOperationException(); } return fileDatas[0]; } public static FileData[] GetFileDatas(string path) { path.AssertArgumentNonNull("path"); string s = Path.GetDirectoryName(path); Extensions.EnsureEndsWithChar(ref s, Path.DirectorySeparatorChar); List list = new List(); foreach (FileSystemInfo item in FileSystemExtensions.GetFileSystemInfosRecursive(path, includeSelf: true)) { list.Add(new DiskFileData(s, item)); } return list.ToArray(); } public static FileData[] GetFileDatas(IEnumerable paths) { paths.AssertArgumentNonNull("paths"); List list = new List(); foreach (string path in paths) { FileData[] fileDatas = GetFileDatas(path); list.AddRange(fileDatas); } return list.ToArray(); } }