示例#1
0
        public bool Load(string path)
        {
            if (!File.Exists(path))
            {
                return(false);
            }

            Clear();

            name = path;
            using (var reader = new BinaryReader(File.OpenRead(path)))
            {
                var count = reader.ReadInt32();
                for (var i = 0; i < count; i++)
                {
                    var file = new VFile {
                        id = i
                    };
                    file.Deserialize(reader);
                    AddFile(file);
                }

                _pos = reader.BaseStream.Position;
            }

            Reindex();
            return(true);
        }
示例#2
0
        public static List <VFile> LoadVersions(string filename, bool update = false)
        {
            var rootDir = Path.GetDirectoryName(filename);
            var data    = update ? _updateData : _baseData;

            data.Clear();
            using (var stream = File.OpenRead(filename)) {
                var reader = new BinaryReader(stream);
                var list   = new List <VFile> ();
                var ver    = reader.ReadInt32();
                Debug.Log("LoadVersions:" + ver);
                var count = reader.ReadInt32();
                for (var i = 0; i < count; i++)
                {
                    var version = new VFile();
                    version.Deserialize(reader);
                    list.Add(version);
                    data [version.name] = version;
                    var dir = string.Format("{0}/{1}", rootDir, Path.GetDirectoryName(version.name));
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }
                }
                return(list);
            }
        }
示例#3
0
        public void AddFile(string path, long len, string hash)
        {
            var file = new VFile {
                name = path, len = len, hash = hash
            };

            AddFile(file);
        }
示例#4
0
        public static void BuildVersions(string outputPath, string[] bundles, int version)
        {
            var path = outputPath + "/" + Filename;

            if (File.Exists(path))
            {
                File.Delete(path);
            }
            var dataPath = outputPath + "/" + Dataname;

            if (File.Exists(dataPath))
            {
                File.Delete(dataPath);
            }

            var disk = new VDisk();

            foreach (var file in bundles)
            {
                using (var fs = File.OpenRead(outputPath + "/" + file))
                {
                    disk.AddFile(file, fs.Length, Utility.GetCRC32Hash(fs));
                }
            }

            disk.name = dataPath;
            disk.Save();

            using (var stream = File.OpenWrite(path))
            {
                var writer = new BinaryWriter(stream);
                writer.Write(version);
                writer.Write(disk.files.Count + 1);
                using (var fs = File.OpenRead(dataPath))
                {
                    var file = new VFile {
                        name = Dataname, len = fs.Length, hash = Utility.GetCRC32Hash(fs)
                    };
                    file.Serialize(writer);
                }

                foreach (var file in disk.files)
                {
                    file.Serialize(writer);
                }
            }
        }
示例#5
0
        public void Deserialize(BinaryReader reader)
        {
            ver = reader.ReadInt32();
            var count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var file = new VFile();
                file.Deserialize(reader);
                files.Add(file);
                _dataFiles[file.name] = file;
            }
            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                var patch = new VPatch();
                patch.Deserialize(reader);
                patches.Add(patch);
                _dataPatches[patch.id] = patch;
            }
        }
        public static List <VFile> LoadVersions(string filename, bool update = false)
        {
            var data = update ? _updateData : _baseData;

            data.Clear();
            using (var stream = File.OpenRead(filename)) {
                var reader = new BinaryReader(stream);
                var list   = new List <VFile> ();
                var ver    = reader.ReadInt32();
                Debug.Log("LoadVersions:" + ver);
                var count = reader.ReadInt32();
                for (var i = 0; i < count; i++)
                {
                    var version = new VFile();
                    version.Deserialize(reader);
                    list.Add(version);
                    data [version.name] = version;
                }
                return(list);
            }
        }
示例#7
0
 private void AddDownload(VFile item)
 {
     _downloader.AddDownload(GetDownloadURL(item.name), item.name, _savePath + item.name, item.hash, item.len);
 }
示例#8
0
 private void AddFile(VFile file)
 {
     _data[file.name] = file;
     files.Add(file);
 }