Создать архив с паролем - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер, я пишу архиватор, и хочу сделать так чтобы на него можно было устанавливать пароль, а именно : написать пароль в textBox, и при нажатии на button создавался архив с данным паролем, как это лучше реализовать?

Решение задачи: «Создать архив с паролем»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Windows.Forms.VisualStyles;
using Ionic.Zip;
 
 
 
namespace ListView
{
    public partial class Form1 : Form
    {
        public FolderBrowserDialog SaveDialog;
        public OpenFileDialog OpenFiles;
        public SaveFileDialog SaveFile;
        public ZipFile zip;
        string FPath;
        string backPath;
        public List<string> filess = new List<string>();
        public string Archive;
        List<string> ls = new List<string>();
        public Form1()
        {
            InitializeComponent();
 
            listView2.View = View.Details;
            listView2.GridLines = true;
            listView2.CheckBoxes = true;
 
            listView2.Columns.Add("Name", -2, HorizontalAlignment.Left);
            listView2.Columns.Add("Size, kb", -2, HorizontalAlignment.Left);
            listView2.Columns.Add("Type", -2, HorizontalAlignment.Left);
        }
        void GetLocDir()
        {
            listView1.Items.Clear();
            textBox1.Text = "Мой компьютер";
            String[] LogicalDrives = Environment.GetLogicalDrives();
            foreach (string s in LogicalDrives)
            {
                listView1.Items.Add(s, 1);
                ls.Add(s);
            }
        }
 
        void GetFiles()
        {
            listView1.BeginUpdate();
            try
            {
                string[] dirs = Directory.GetDirectories(FPath);
                ls.Clear();
                try
                {
                    DirectoryInfo dInfo = new DirectoryInfo(FPath);
                    backPath = dInfo.Parent.FullName;
                }
                catch { }
                listView1.Items.Clear();
 
                foreach (string s in dirs)
                {
                    string dirname = System.IO.Path.GetFileName(s);
                    listView1.Items.Add(dirname, 1);
                    ls.Add(s);
                }
 
                string[] files = Directory.GetFiles(FPath);
                foreach (string s in files)
                {
                    string filename = System.IO.Path.GetFileName(s);
                    listView1.Items.Add(filename, 0);
                }
 
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            listView1.EndUpdate();
        }
 
        private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                listView2.Items.Clear();
 
                foreach (string file in Directory.GetFiles(fbd.SelectedPath))
                {
                    ListViewItem item1 = new ListViewItem(Path.GetFileName(file));
                    item1.SubItems.Add((Math.Round(new FileInfo(file).Length / 1024.0, 2)).ToString());
 
                    Win32API.SHFILEINFO info = new Win32API.SHFILEINFO();
                    uint dwFileAttributes = Win32API.FILE_ATTRIBUTE.FILE_ATTRIBUTE_NORMAL;
                    uint uFlags = (uint)(Win32API.SHGFI.SHGFI_TYPENAME | Win32API.SHGFI.SHGFI_USEFILEATTRIBUTES);
                    Win32API.SHGetFileInfo(file, dwFileAttributes, ref info, (uint)Marshal.SizeOf(info), uFlags);
 
                    item1.SubItems.Add(info.szTypeName);
                    item1.Checked = true;
 
                    listView2.Items.Add(item1);
                }
                for (int i = 0; i < listView2.Columns.Count; i++)
                    listView2.AutoResizeColumn(i, ColumnHeaderAutoResizeStyle.ColumnContent);
            }
        }
 
        private void listView1_ItemActivate(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0)
                return;
 
            ListViewItem item = listView1.SelectedItems[0];
            if (item.ImageIndex == 1)
            {
                string it = item.Text;
                string title = "";
                foreach (string s in ls)
                {
                    try
                    {
                        if (s.Substring(s.Length - it.Length, it.Length) == it)
                        {
                            FPath = s;
                            title = s;
                        }
                    }
                    catch { }
                }
                try
                {
                    string[] dirs = Directory.GetDirectories(FPath);
                    textBox1.Text = title;
                    GetFiles();
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
 
            else if (item.ImageIndex == 0)
            {
                string start = textBox1.Text + "" + item.Text;
                System.Diagnostics.Process.Start(start);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            bool b = false;
            String[] LogicalDrives = Environment.GetLogicalDrives();
            foreach (string s in LogicalDrives)
            {
                if (backPath == s && FPath == s) b = true;
            }
            if (backPath != null && !b)
            {
                this.Text = backPath;
                FPath = backPath;
                GetFiles();
            }
            else
            {
                GetLocDir();
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            GetLocDir();
        }
 
        FolderBrowserDialog bd = new FolderBrowserDialog();
        private void button2_Click(object sender, EventArgs e)
        {
             OpenFiles = new OpenFileDialog();
            OpenFiles.Title = "Выберите файлы, которые необходимо заархивировать";
 
            if (OpenFiles.ShowDialog() == DialogResult.OK)
            {
                filess.AddRange(OpenFiles.FileNames);
            }
            try
            {
                string path = "";
                SaveFile = new SaveFileDialog();
                SaveFile.Title = "Сохранение архива";
                SaveFile.FileName = "Archive (" + DateTime.Now.ToShortDateString() + ")";
                SaveFile.Filter = "Файл ZIP|*.zip";
                if (SaveFile.ShowDialog() == DialogResult.OK)
                {
                    path = SaveFile.FileName;
                }
 
                else throw new Exception("Не выбрано место для сохранения архива!");
                using (zip = new ZipFile(path, Encoding.UTF8))
                {
                    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
                    zip.TempFileFolder = Path.GetTempPath();
                    zip.Password = "пароль";
                    foreach (string f in filess)
                    {
                        zip.AddFile(f, "");
                    }
                    zip.Save();
                    zip = null;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Вы не выбрали файл.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            MessageBox.Show("Данные успешно сохранены", "Инфо", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
             OpenFiles = new OpenFileDialog();
            OpenFiles.Title = "Выберите архив, который необходимо разархивировать";
 
            if (OpenFiles.ShowDialog() == DialogResult.OK)
            {
                Archive = OpenFiles.FileName;
            }
            string path = "";
 
 
            SaveDialog = new FolderBrowserDialog();
            SaveDialog.Description = "Выберите папку для разархивации";
 
            if (SaveDialog.ShowDialog() == DialogResult.OK)
            {
                path = SaveDialog.SelectedPath;
            }
            else throw new Exception("Не выбрано место для разархивации архива!");
 
 
            using (zip = new ZipFile(Archive, Encoding.UTF8))
            {
                zip.TempFileFolder = System.IO.Path.GetTempPath();
                zip.ExtractAll(path, ExtractExistingFileAction.OverwriteSilently);
                zip = null;
            }
            MessageBox.Show("Данные успешно извлечены", "Инфо", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            ListViewItem item = listView1.SelectedItems[0];
            listView1.Items.Remove(item);
        }
 
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
        private void добавитьАрхивToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3();
            f3.Show();
            
        }
 
        private void извлечьАрхивToolStripMenuItem_Click(object sender, EventArgs e)
        {
              OpenFiles = new OpenFileDialog();
            OpenFiles.Title = "Выберите архив, который необходимо разархивировать";
 
            if (OpenFiles.ShowDialog() == DialogResult.OK)
            {
                Archive = OpenFiles.FileName;
            }
            string path = "";
 
 
            SaveDialog = new FolderBrowserDialog();
            SaveDialog.Description = "Выберите папку для разархивации";
 
            if (SaveDialog.ShowDialog() == DialogResult.OK)
            {
                path = SaveDialog.SelectedPath;
            }
            else throw new Exception("Не выбрано место для разархивации архива!");
 
 
            using (zip = new ZipFile(Archive, Encoding.UTF8))
            {
                zip.TempFileFolder = System.IO.Path.GetTempPath();
                zip.ExtractAll(path, ExtractExistingFileAction.OverwriteSilently);
                zip = null;
            }
 
            MessageBox.Show("Данные успешно извлечены", "Инфо", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }
        }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5