Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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();
                    }
                }
            }
        }
Esempio n. 6
0
 public ReadonlyFile(MemoryStream initialContent, FileInfo path)
 {
     m_upToDateFile              = new UpToDateFile(initialContent, path, s => { });
     m_upToDateFile.FileChanged += () => FileModifiedExternally.Execute();
     m_upToDateFile.FileDeleted += () => FileDeletedExternally.Execute();
 }