Kompresja plików do osobnych archiwów

0

Witam. Mam mały problem. Piszę aplikację do backupu baz danych z MS SQL'a. Główny program działa, natomiast chciałbym teraz pliki z rozszerzeniem .bak pakować w osobne archiwa. Aktualnie wygląda to tak, że pakuje wszystkie pliki do jednego archiwum i usuwa pliki .bak bo już je zapakował. Poniżej przesyłam fragment kodu. Będę bardzo wdzięczny za pomoc :).

 {

                        Process cmd = new Process();
                        cmd.StartInfo.FileName = "cmd.exe";
                        cmd.StartInfo.RedirectStandardInput = true;
                        cmd.StartInfo.RedirectStandardOutput = true;
                        cmd.StartInfo.CreateNoWindow = true;
                        cmd.StartInfo.UseShellExecute = false;
                        cmd.Start();
                        cmd.StandardInput.WriteLine("echo off");
                        //cmd.StandardInput.WriteLine("dir");
                        cmd.StandardInput.WriteLine("rem ----------------------------------------");
                        //serwer
                        cmd.StandardInput.WriteLine(@"set serwer=" + serwer);
                        //login użytkownika
                        cmd.StandardInput.WriteLine("set user=" + user);
                        //hasło użytkownika
                        cmd.StandardInput.WriteLine("set password=" + password);
                        //sciezka do miejsca gdzie robią się backupy
                        cmd.StandardInput.WriteLine(@"set backup=" + daily);
                        //sciezka do miejsca ustawień
                        cmd.StandardInput.WriteLine(@"set setting=" + setting);
                        //liczenie dni wstecz
                        DateTime today = DateTime.Today;
                        DateTime daysago = (today.AddDays(-1)); //tutaj ile wstecz
                        TimeSpan roznica = today - daysago;
                        double iledotylu = roznica.TotalDays;
                        string liczba = iledotylu.ToString();
                        cmd.StandardInput.WriteLine("set time=-" + iledotylu);
                        cmd.StandardInput.WriteLine("rem ------------------------------------------");
                        cmd.StandardInput.WriteLine("sqlcmd -S %serwer% -i \"%setting%\\backup_daily.sql\" -U %user% -P %password%");
                        //przejscie do folderu nadrzędnego skryptu
                        cmd.StandardInput.WriteLine("cd " + daily);
                        cmd.StandardInput.WriteLine("cd ..");
                        string[] lista = Directory.GetFiles(daily);
                        FileStream plik = new FileStream("lista.txt", FileMode.Append);
                        StreamWriter sw = new StreamWriter(plik, Encoding.Unicode);
                        int licznik = 0;
                        while (licznik < lista.Length)
                            {
                                sw.WriteLine(lista[licznik]);
                                licznik++;
                            }
                        sw.Close();
                        plik.Close();
                        cmd.StandardInput.WriteLine("7z.exe a "+ daily + today + ".7z "+daily+"*.bak");
                        //cmd.StandardInput.WriteLine("for /f \"tokens = *\" %%F IN ('dir %backup%*.bak /b') DO \"7z.exe\" a %backup%.7z %backup%");
                        cmd.StandardInput.WriteLine("rem First Delete *.bak");
                        cmd.StandardInput.WriteLine("del %backup%*.bak");
                        cmd.StandardInput.WriteLine("rem First Delete old SQL Backup Files");
                        cmd.StandardInput.WriteLine("forfiles -p%backup% -s -m*.* -c\" CMD / C del / Q @FILE\"");
                        string[] files = Directory.GetFiles(daily);
                        //usuwanie archiwum po okreslonym czasie
                        foreach (string file in files)
                        {
                            FileInfo fi = new FileInfo(file);
                            if (fi.LastAccessTime < DateTime.Now.AddDays(-1))
                                fi.Delete();
                        }
                        cmd.StandardInput.Flush();
                        cmd.StandardInput.Close();
                        cmd.WaitForExit();
                        File.SetAttributes("zeetRM5TwSmY7ruy", File.GetAttributes("zeetRM5TwSmY7ruy") | FileAttributes.Hidden);
                        Console.WriteLine(cmd.StandardOutput.ReadToEnd());
                    }
0

to co tutaj robisz to uzywasz mlotka do robienia dziur w scianie

Da sie, ale to glupie.

Albo uzyj PowerShella, bo jedynie korzystasz z konsoli, wiec skoro korzystasz z konsoli, to uzyj narzedzia ktore sluzy do tego

Jezeli w C# to

https://www.daniweb.com/programming/software-development/threads/202843/take-backup-of-sql-server-database-using-c

kilka linijek by zrobic backup

a jezeli chodzi o zip to masz dwie linijki

https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-compress-and-extract-files

teraz mozesz zrobic kilka folderow

Inbox
InProgress
Processed

w Inbox niech beda Twoje *.bak do przetworzenia (pozniej mozesz zrobic z tego serwis ktory bedzie nasluchiwal zmian w folderze albo uruchamial sie co X czasu)
dzieki klasie Directory mozesz sprawdzic ile plikow jest i odczytac ich nazwy. Wtedy mozesz sobie pojedynczo archiwizowac.

1 użytkowników online, w tym zalogowanych: 0, gości: 1