小言_互联网的博客

C# 文件压缩解压与sqlite存储文件数据

404人阅读  评论(0)

环境

  • .netframerwork4.8
  • sqlite3

压缩

nuget

  <package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
  <package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />

UI

代码

using Dapper;
using System;
using System.Data.SQLite;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Windows.Forms;
 

namespace 文件存储Sqlite
{
   
    public partial class Form1 : Form
    {
   
        public string connectionStr = "data source=D:\\test\\sqlitedb.db";
        public Form1()
        {
   
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
   
            using (var conn = new SQLiteConnection(connectionStr))
            {
   
                var ds = conn.Query<User>("select * from User");
                dataGridView1.DataSource = ds;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
   
            OpenFileDialog openFileDialog = new OpenFileDialog()
            {
   
                Multiselect = true,
            };

            openFileDialog.ShowDialog();

            var dir = AppDomain.CurrentDomain.BaseDirectory + "tmp\\";
            Directory.CreateDirectory(dir);
            var files = openFileDialog.FileNames;

            foreach (var file in files)
            {
   
                File.Copy(file, dir + Path.GetFileName(file));
            }
            var targetZip = Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.BaseDirectory + files.First()) + ".zip";
            ZipFile.CreateFromDirectory(dir, targetZip);

            using (var conn = new SQLiteConnection(connectionStr))
            {
   
                var ds = conn.Query<User>("select * from User");
                var sql = "UPDATE User set File=@file where ID=@id";
                DynamicParameters pars = new DynamicParameters();
                pars.Add("file", File.ReadAllBytes(targetZip));
                pars.Add("id", ds.First().ID);
                conn.Execute(sql, pars);
            }

            Directory.Delete(dir, true);
            MessageBox.Show("ZipOver");

        }

        private void button3_Click(object sender, EventArgs e)
        {
   
            using (var conn = new SQLiteConnection(connectionStr))
            {
   
                var ds = conn.QuerySingle<User>("select * from User where ID=2");
                File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory + "数据库读取到的文件.zip", ds.File);
            }
            ZipFile.ExtractToDirectory(AppDomain.CurrentDomain.BaseDirectory + "数据库读取到的文件.zip", AppDomain.CurrentDomain.BaseDirectory + "数据库读取到的文件");
            MessageBox.Show("UnZipOver");
        } 
    }

    public class User
    {
   
        public int ID {
    get; set; }

        public byte[] File {
    get; set; }
        public string Name {
    get; set; }
    }
}


 

资源链接(下载地址)

https://download.csdn.net/download/iml6yu/87060041


ZipFile 类

  • 命名空间:
    System.IO.Compression
  • 程序集:
    System.IO.Compression.ZipFile.dll
    提供创建、解压缩和打开 zip 存档的静态方法。

  • demo
using System;
using System.IO.Compression;

class Program
{
   
    static void Main(string[] args)
    {
   
        string startPath = @".\start";
        string zipPath = @".\result.zip";
        string extractPath = @".\extract";

        ZipFile.CreateFromDirectory(startPath, zipPath);

        ZipFile.ExtractToDirectory(zipPath, extractPath);
    }
}

 

方法

  • CreateFromDirectory(String, String)
    创建 zip 存档,该存档包含指定目录的文件和目录。

  • CreateFromDirectory(String, String, CompressionLevel, Boolean)
    创建 zip 存档,该存档包括指定目录的文件和目录,使用指定压缩级别,以及可以选择包含基目录。

  • CreateFromDirectory(String, String, CompressionLevel, Boolean, Encoding)
    创建 zip 存档,该存档包括文件和指定目录的目录,使用指定压缩级别和条目名称的字符编码,以及可以选择包含基目录。

  • ExtractToDirectory(String, String)
    将指定 zip 存档中的所有文件都解压缩到文件系统的一个目录下。

  • ExtractToDirectory(String, String, Boolean)
    将指定存档中的所有文件都解压缩到文件系统的某目录下。

  • ExtractToDirectory(String, String, Encoding)
    将指定 zip 存档中的所有文件解压缩到文件系统的一目录下,并使用项名称的指定字符编码。

  • ExtractToDirectory(String, String, Encoding, Boolean)
    将指定存档中的所有文件都解压缩到文件系统的某目录下。

  • Open(String, ZipArchiveMode)
    以指定的模式打开指定路径上的 zip 归档。

  • Open(String, ZipArchiveMode, Encoding)
    在指定的模式中用指定的项名称汉字解码打开指定路径的 zip 存档。

  • OpenRead(String)
    打开在指定路径用于读取的 zip 存档。

    https://learn.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile?view=net-7.0


转载:https://blog.csdn.net/iml6yu/article/details/128128547
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场