Beispiel #1
0
        static void Replace(string archivePath, string fileInArchive, string fileOnDisk, string newArchivePath)
        {
            CrafArchive archive = null;

            try
            {
                archive = CrafArchive.Open(archivePath);
                var task = archive.LoadAsync(new Progress <int>());
                task.Wait();
                archive.CloseReader();
            }
            catch (IOException)
            {
                Console.WriteLine("Could not open archive");
                Environment.Exit(-1);
            }

            var id = archive.IndexOfDiskPath(fileInArchive);

            if (id == -1)
            {
                Console.WriteLine("File in archive not found");
                Environment.Exit(-1);
            }

            Console.WriteLine("Loading new file...");
            try
            {
                archive.Replace(id, File.ReadAllBytes(fileOnDisk));
            }
            catch (IOException ex)
            {
                Console.WriteLine("Could not read replacement file");
                Console.WriteLine("Details: " + ex.Message);
                Environment.Exit(-1);
            }

            Console.WriteLine("Writing back files...");
            var fivePercent = archive.Count() / 20;

            if (fivePercent == 0)
            {
                fivePercent = 1;
            }
            try
            {
                var task2 = archive.SaveAsync(newArchivePath, new Progress <int>((i) =>
                {
                    if (i % fivePercent == 0)
                    {
                        Console.Write(".");
                    }
                }));
                task2.Wait();
            }
            catch (IOException ex)
            {
                Console.WriteLine("");
                Console.WriteLine("Could not write new archive");
                Console.WriteLine("Details: " + ex.Message);
                Environment.Exit(-1);
            }
            Console.WriteLine("");
        }