예제 #1
0
        public static UFileManager Create(string fileName, IDataSerializer serializer, bool crcEnabled,
                                          int blockSize = 4096)
        {
            UFileManager manager = new UFileManager();

            manager.dataSerializer = serializer;

            manager.mainHeader            = new Header();
            manager.mainHeader.CRCEnabled = crcEnabled;
            manager.mainHeader.Filled     = true;
            manager.mainHeader.LastBlock  = true;

            manager.blockSize = blockSize;
            manager.fileMap   = new Dictionary <string, long>();
            manager.stream    = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);

            manager.fileMap.Add("$_BlockSize_$", manager.blockSize);
            manager.AvailableEndBlockSize = blockSize - Header.HeaderSize;
            manager.AvailableMidBlockSize = manager.AvailableEndBlockSize - sizeof(long);

            byte[] mapBytes = serializer.Serialize(manager.fileMap);
            manager.FillData("", mapBytes, 0);
            //manager.mainHeader.Length = mapBytes.Length;
            //manager.mainHeader.SetChecksum(mapBytes);
            //byte[] header = Header.ToBytes(manager.mainHeader);
            //manager.stream.Write(header, 0, header.Length);
            //manager.stream.Write(mapBytes, 0, mapBytes.Length);
            //manager.stream.Flush();
            return(manager);
        }
예제 #2
0
 public UFEnumerator(UFileManager manager)
 {
     source        = manager;
     keyEnumerator = source.fileMap.Keys.GetEnumerator();
 }