using System; using System.IO; namespace ScreenConnect; public class DiskFileData : FileData { private string basePath; private FileSystemInfo fileSystemInfo; public override string FilePath => fileSystemInfo.FullName.Substring(basePath.Length); public override long Size { get { if (!(fileSystemInfo is FileInfo fileInfo)) { return 0L; } if (!fileInfo.Attributes.AreFlagsSet(FileAttributes.ReparsePoint)) { return fileInfo.Length; } return -1L; } } public override DateTime CreationTime => fileSystemInfo.CreationTime; public override DateTime LastWriteTime => fileSystemInfo.LastWriteTime; public override DateTime LastAccessTime => fileSystemInfo.LastAccessTime; public override bool IsDirectory => fileSystemInfo is DirectoryInfo; public DiskFileData(string basePath, FileSystemInfo fileSystemInfo) { this.basePath = basePath.AssertArgumentNonNull("basePath"); this.fileSystemInfo = fileSystemInfo.AssertArgumentNonNull("fileSystemInfo"); } public override void Dispose() { } public override Stream OpenReadStream() { return fileSystemInfo.To().Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); } }