예제 #1
0
 private static void CloneDatabase(Memfs memfs, string source, string target)
 {
     Console.WriteLine("Clone database; from '{0}' into '{1}'...", source, target);
     using (var iStream = memfs.GetStream(source))
         using (var oStream = memfs.GetStream(target))
             iStream.CopyTo(oStream);
 }
예제 #2
0
        private static void CheckStreamReadWrite(Memfs memfs, string fileName, string memfsName, int bufferSize)
        {
            using (var fileStream = System.IO.File.OpenRead(fileName))
                using (var memfsStream = memfs.GetStream(memfsName))
                {
                    //memfsStream.SetLength(fileStream.Length);

                    int amount = 0;
                    var buffer = new byte[bufferSize];
                    while ((amount = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        memfsStream.Write(buffer, 0, amount);
                    }

                    if (fileStream.Position != memfsStream.Position)
                    {
                        Console.WriteLine("finished at different positions");
                    }
                    if (fileStream.Length != memfsStream.Length)
                    {
                        Console.WriteLine("different file lengths");
                    }
                }

            using (var fileStream = System.IO.File.OpenRead(fileName))
                using (var memfsStream = memfs.GetStream(memfsName))
                {
                    int total = 0, amount = 0;
                    var buffer = new byte[bufferSize];
                    var data   = new byte[buffer.Length];
                    while ((amount = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        var len = memfsStream.Read(data, 0, amount);
                        if (len != amount)
                        {
                            Console.WriteLine("did not read correct amount");
                        }
                        if (fileStream.Position != memfsStream.Position)
                        {
                            Console.WriteLine("streams at different positions");
                        }
                        //Console.WriteLine("file: {0}; memfs: {1}", fileStream.Position, memfsStream.Position);
                        for (int i = 0; i < Math.Min(len, amount); ++i)
                        {
                            if (buffer[i] != data[i])
                            {
                                Console.WriteLine("mismatch at position {0}", total + i);
                            }
                        }

                        total += len;
                        if (amount != len)
                        {
                            fileStream.Seek(total, System.IO.SeekOrigin.Begin);
                        }
                    }
                    Console.WriteLine("compare finished");
                }
        }
예제 #3
0
        static void Main(string[] args)
        {
            try
            {
                using (var memfs = new Memfs())
                {
                    CheckStreamReadWrite(memfs, "C:\\temp\\test.bin", "X:\\test.bin", 6000);
                }

                var guid = Guid.NewGuid();
                using (var memfs = new Memfs())
                {
                    CreateDatabase("X:\\db1");

                    CloneDatabase(memfs, "X:\\db1", "X:\\db2");

                    InsertData("X:\\db2", guid);

                    CloneDatabase(memfs, "X:\\db2", "X:\\db3");

                    ParallelUpdate(guid, "X:\\db1", "X:\\db2");
                    ParallelUpdate(guid, "X:\\db3", "X:\\db3");

                    ReadData("X:\\db3");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            if (System.Diagnostics.Debugger.IsAttached)
            {
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true); Console.WriteLine();
            }
        }