public bool Move(FileInfo path, Func <bool> replace) { var oldFile = File; if (path.Exists) { if (replace()) { path.Delete(); } else { return(false); } } var stream = m_upToDateFile.Migrate(); m_upToDateFile.Dispose(); System.IO.File.Move(oldFile.FullName, path.FullName); m_upToDateFile = new UpToDateFile(stream, path, s => { }); m_upToDateFile.FileChanged += () => FileModifiedExternally.Execute(); m_upToDateFile.FileDeleted += () => FileDeletedExternally.Execute(); Moved.Execute(oldFile, File); return(true); }
public SaveableFile(MemoryStream initialContent, FileInfo path, Action <Stream> saveTo) { m_upToDateFile = new UpToDateFile(initialContent, path, saveTo); m_upToDateFile.FileChanged += () => FileModifiedExternally.Execute(); m_upToDateFile.FileDeleted += () => FileDeletedExternally.Execute(); m_saveTo = saveTo; m_lastSavedOrLoaded = initialContent; }
public void GotMoved(FileInfo newPath) { var oldFile = File; m_upToDateFile = new UpToDateFile(m_upToDateFile.Migrate(), newPath, s => { }); m_upToDateFile.FileChanged += () => FileModifiedExternally.Execute(); m_upToDateFile.FileDeleted += () => FileDeletedExternally.Execute(); Moved.Execute(oldFile, File); }
public void SaveAs(FileInfo path) { var oldPath = File; m_upToDateFile.Dispose(); m_upToDateFile = new UpToDateFile(new MemoryStream(), path, m_saveTo); m_upToDateFile.FileChanged += () => FileModifiedExternally.Execute(); m_upToDateFile.FileDeleted += () => FileDeletedExternally.Execute(); Save(); Moved.Execute(oldPath, File); }
public static void StressTest() { MemoryStream data = new MemoryStream(); using (StreamWriter w = new StreamWriter(data, Encoding.UTF8, 1024, true)) { w.WriteLine("asgfladhfldsalkhdsfdsfasf"); } data.Position = 0; Action <Stream> saveto = s => { data.Position = 0; data.CopyTo(s); data.Position = 0; }; using (FileStream file = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.Write)) { saveto(file); } using (UpToDateFile.BackEnd backEnd = new UpToDateFile.BackEnd()) { using (UpToDateFile f = new UpToDateFile(data, new FileInfo("test.txt"), saveto, backEnd)) { f.FileChanged += () => { Assert.Fail("FileChange should not have triggered"); }; try { for (int i = 0; i < 200; i++) { f.Save(); f.Save(); data.Position = 10; data.WriteByte((byte)(i % 256)); f.Save(); Console.WriteLine(i); } } catch (MyFileLoadException) { Assert.Fail(); } } } }
public ReadonlyFile(MemoryStream initialContent, FileInfo path) { m_upToDateFile = new UpToDateFile(initialContent, path, s => { }); m_upToDateFile.FileChanged += () => FileModifiedExternally.Execute(); m_upToDateFile.FileDeleted += () => FileDeletedExternally.Execute(); }