From a10440a45c40652b13e883aec832a0c8ded685e8 Mon Sep 17 00:00:00 2001 From: John T Date: Sun, 5 Nov 2017 18:47:46 -0500 Subject: Added a half-complete ShiftFS and did some code cleanup --- ShiftOS.Engine/ShiftFS/ShiftFile.cs | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 ShiftOS.Engine/ShiftFS/ShiftFile.cs (limited to 'ShiftOS.Engine/ShiftFS/ShiftFile.cs') diff --git a/ShiftOS.Engine/ShiftFS/ShiftFile.cs b/ShiftOS.Engine/ShiftFS/ShiftFile.cs new file mode 100644 index 0000000..1a2413c --- /dev/null +++ b/ShiftOS.Engine/ShiftFS/ShiftFile.cs @@ -0,0 +1,48 @@ +using System; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +namespace ShiftOS.Engine.ShiftFS +{ + public class ShiftFile : ShiftFsObject + { + public ShiftFile(string path) : base(path) + { + path = path.Replace(ShiftFs.SavePath, ""); + + using (var fs = new FileStream(Path.Combine(ShiftFs.SavePath, path), FileMode.Open)) + { + Bytes = new MemoryStream(); + fs.CopyTo(Bytes); + } + + var file = new FileInfo(Path.Combine(ShiftFs.SavePath, path)); + + Name = file.Name; + FullDiskName = file.FullName; + FullName = path; + } + + public new ShiftDirectory Parent => new ShiftDirectory(new FileInfo(FullDiskName).Directory.FullName); + + public MemoryStream Bytes { get; set; } + public long Length => Bytes.Length; + } + + public class ShiftFile : ShiftFile // please C# gods let us constrain to attributes + { + public ShiftFile(string path) : base(path) + { + if (!typeof(T).IsSerializable) + { + throw new InvalidOperationException("Non-serializable types are not supported"); + } + } + + public T Object + { + get => (T) new BinaryFormatter().Deserialize(Bytes); + set => new BinaryFormatter().Serialize(Bytes, value); + } + } +} \ No newline at end of file -- cgit v1.2.3