Member 14861986 Ответов: 2

Как ihow создать защищенный паролем zip - файл файла .bak после создания резервной копии программно? ...


Я делаю резервную копию базы данных по событию нажатия кнопки. Но в целях безопасности я хочу создать защищенный паролем zip-файл.Который будет иметь тот файл .bak, который недавно был создан. И после создания zip удалите этот файл .bak. Я попробовал этот код, но он постоянно выбрасывает исключение, которое "неподписанный формат файла"

Что я уже пробовал:

private void btnSave_Click(object sender, EventArgs e)
{
    if (txtLocation.Text == string.Empty)
    {
        MessageBox.Show("Please select Backup File Location", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        try
        {
            string FileName = "'"+txtLocation.Text + "Backup";
            string BackupFileName = "" + FileName + ".bak'";
            string BackupZipFileName = "" + FileName + ".zip'";
            cn.Open();
            cmd.CommandText = @"BACKUP DATABASE POS TO DISK = " + BackupFileName;
            cmd.CommandType = CommandType.Text;
            cmd.Connection = cn;
            dr = cmd.ExecuteReader();
            dr.Close();
            cn.Close();
           // byte[] bt = File.ReadAllBytes(BackupFileName);
            FileStream fStream = File.Create(BackupZipFileName);
            GZipStream gZip = new GZipStream(fStream, CompressionMode.Compress);
            //zip process
            //delete backupfilename
            //string sZipFileName = BackupFileName.Replace(".bak", ".zip");
            //byte[] bt = File.ReadAllBytes(sZipFileName);
            //FileStream fStream = File.Create(sZipFileName, bt.Length, FileOptions.Encrypted);

            //    GZipStream gZip = new GZipStream(fStream, CompressionMode.Compress);

            //    gZip.Write(bt, 0, bt.Length);
            //    gZip.Close();
            //    gZip.Dispose();

            MessageBox.Show("Backup Successfull", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.Close();
        }
        catch (Exception ex)
        {
            cn.Close();
            MessageBox.Show(ex.Message);
        }
    }

2 Ответов

Рейтинг:
2

Maciej Los

Я бы посоветовал использовать DotNetZip 1.13.8 (NuGet Gallery)[^]

Цитата:
DotNetZip-это быстрая бесплатная библиотека классов и набор инструментов для работы с zip-файлами. Используйте VB, C# или любой другой .Чистый язык, чтобы без труда создавать, извлекать и обновлять файлы zip


Использование:
using (ZipFile zip = new ZipFile())
{
  zip.Password= "123456!"; //password for all files
  zip.AddFile("ReadMe.txt");
  zip.AddFile("7440-N49th.png");
  zip.AddFile("2005_Annual_Report.pdf");
  zip.Save("Backup.zip");
}


Вот полная документация: О DotNetZip - Документация DotNetZip[^]


Garth J Lancaster

+5 Мацей

Maciej Los

- Спасибо, Гарт.

Рейтинг:
0

Richard MacCutchan

FileStream fStream = File.Create(BackupZipFileName);
GZipStream gZip = new GZipStream(fStream, CompressionMode.Compress);

Вы пытаетесь заархивировать zip-файл, который еще не создан. Вам нужно заархивировать файл резервной копии.


Member 14861986

Можете ли вы опубликовать код, как это сделать?

Richard MacCutchan

Какой код? Вам просто нужно передать правильное имя файла в файл FileStream конструктор.

Member 14861986

Конструктор FileStream не создает BackupZipFileName?

Richard MacCutchan

Извините, я не знаю. Проверьте документацию для классов GZip, которые вы пытаетесь использовать. Где на самом деле происходит исключение?