private void RunExtract() { try { Progress = 0; FileStream fileStream = new FileStream(this.backupFile, FileMode.Open, FileAccess.Read); GZipStream gzipStream = new GZipStream(fileStream, CompressionMode.Decompress); DeserializeContext context = new DeserializeContext(gzipStream); int fileCount = context.ReadInt32(); long totalSize = context.ReadInt64(); long doneSize = 0; for (int index = 0; index < fileCount; index++) { string fileName = context.ReadString(); FileName = fileName; byte[] data = context.ReadBytes(); File.WriteAllBytes(Path.Combine(this.dataPath, fileName), data); doneSize += data.Length; Progress = 1d / (double)totalSize * (double)doneSize; } context.Close(); gzipStream.Close(); fileStream.Close(); } catch (Exception exception) { Exception = exception; } Complete = true; }