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

news2025/5/16 12:49:11

文章目录

  • 环境
  • 压缩
    • nuget
    • UI
    • 代码
  • 资源链接(下载地址)
  • ZipFile 类
      • 方法

环境

  • .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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四嗪-五聚乙二醇-羧基,1682653-79-7,Tetrazine-PEG5-COOH 水溶性和稳定性怎么样?

●中文名&#xff1a;四嗪-五聚乙二醇-羧基 ●英文&#xff1a;Tetrazine-PEG5-COOH ●外观以及性质&#xff1a;Tetrazine-PEG5-COOH为红色固体&#xff0c;四嗪目前被广泛应用于蛋白质特定位点功能阐释、亚细胞结构选择性标记。四嗪PEG衍生物用于与 TCO&#xff08;反式环辛烯…

【Linux初阶】操作系统概念与定位 | 操作系统管理硬件方法、系统调用和库函数概念

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;操作系统的基础概念、设计OS的目的&#xff0c;操作系统的定位&#xff0c;操作系统管理硬件方法&#xff0c;…

【正厚软件干货】我推荐你的入门编程语言选python

By——正厚技术极客陈多多 当友友看到这篇文章的时候&#xff0c;心里一定有一个学习编程的想法&#xff0c;但是又不知道挑选哪个作为入门语言&#xff01;我写这篇文章就是为了帮有困难的你做出选择&#xff01;&#xff08;作者本人有选择困难症&#xff0c;当时也纠结了好久…

图神经网络关系抽取论文阅读笔记(五)

1 依赖驱动的注意力图卷积网络关系抽取方法&#xff08;Dependency-driven Relation Extractionwith Attentive Graph Convolutional Networks&#xff09; 论文&#xff1a;Dependency-driven Relation Extraction with Attentive Graph Convolutional Networks.ACL 2021 1.1 …

Win11系统禁止关机键关机的方法教学

Win11系统禁止关机键关机的方法教学。在操作电脑的时候&#xff0c;有用户经常出现自己误触关键按键导致电脑关机的情况。对于这个情况&#xff0c;我们可以去开启电脑禁止关机按键关机的设置。这样就可以不用担心误触导致关机的问题了。一起看看设置的方法吧。 操作方法&#…

OFFER狂魔成长指南

OFFER OFFER狂魔成长指南 前言 本文章是总结了我春招的经历&#xff0c;博主背景为211某流计算机专业&#xff0c;考研失败转春招。因为计划会再考一年因此主要面试的偏国企专业&#xff08;现在放弃了&#xff0c;因为公司里面校招生就我一个本科&#xff0c;其他都是21198…

基于VDI2230规范的螺栓评估(上)

作者&#xff1a;王庆艳&#xff0c;安世中德工程师&#xff0c;仿真秀科普作者 一、写在前面 【螺栓评估准则】&#xff1a;VDI2230&#xff08;高强度螺栓连接系统计算&#xff09;规范是德国工程师协会负责编写整理&#xff0c;包括Part1及Part2两部分&#xff0c;是目前针…

(5)点云数据处理学习——其它官网例子2

1、主要参考 &#xff08;1&#xff09;官方稳定地址 Point cloud — Open3D 0.16.0 documentation 2、相关功能 2.1凸包&#xff08;Convex hull&#xff09; &#xff08;1&#xff09;函数 compute_vertex_normals create_from_triangle_mesh &#xff08;2&#xff09;…

Three.js教程之在网页快速实现 3D效果(教程含源码)

介绍 本文概述了与使用 Three.js 在常规 Web 浏览器中直接在 Web 上制作 3D 图形相关的术语和概念。对于 3D,就像任何主题一样,如果您深入了解所有细节,事情会很快变得复杂。我将尝试做相反的事情,并简单概述您在学习如何在常规 Web 浏览器中制作 3D 时会遇到的所有概念。 …

手把手教你用站长工具综查询网站域名在各个平台的权重情况 站长工具综查询

网站权重是根据流量值来判断网站的权重值。权重值是属于第三方评估就有参考的意义。 了解网站的权重可以助于SEO专员找到工作的方向。使用站长工具综合查询可以看到网站在各个平台的权重情况。 用站长工具综合查询网站在各个平台的权重情况的操作步骤吧&#xff01; 第一步、打…

德云一哥岳云鹏,准备录制河南和东方卫视节目,央视春晚还参加吗

时间如白驹过隙&#xff0c;转眼马上又要过年了&#xff0c;央视春晚也备受关注&#xff0c;不知道今年春晚究竟有哪些明星登台演出。说起央视春晚舞台&#xff0c;就不得不说起相声和小品&#xff0c;这两个节目是春晚的台柱子&#xff0c;也一直深受大家的喜爱。 尤其是最近几…

Linux基础概念,目录文件操作命令,压缩命令:

Linux基础概念&#xff1a; 1&#xff0c;linux登录方式&#xff0c;本地登录&#xff0c;远程登录&#xff08;借助xshell等&#xff09; 登录后是shell交互界面&#xff0c;用c编写的程序。常见的就是bash&#xff0c;sh&#xff0c;csh&#xff0c;ksh等。 2&#xff0c;li…

项目实战——Web自动化测试

目录 一、前言及测试用例设计 二、 首页测试&#xff08;未登录&#xff09; 三、注册测试 四、对局列表测试 五、排行榜测试 六、对战测试 七、Bot测试 八、测试套件Suite 一、前言及测试用例设计 整个项目已经部署完成&#xff0c;我们历经九九八十一难&#xff0c;…

英国Top20名校更偏爱IB申请党?

IB的全球超高认可度相信大家都有共识&#xff0c;英国大学对于A-Level、IB成绩都持认可态度。 但多数人会认为A-Level成绩申请英国名校会比IB更有优势&#xff0c;事实果真如此吗&#xff1f;接下来通过官方给出的数据&#xff0c;我们来一探究竟~ 01英国Top20名校更偏爱IB学生…

Linux的十个常用命令

目录 1、ls 2、pwd 3、cd 4、touch 5、cat 6、echo 7、mkdir 8、rm 9、mv 10、cp 1、ls ls命令用于显示目录中的文件信息. 格式&#xff1a;ls [选项] [文件] 参数&#xff1a; -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)-l 除文件名称外&#xff0c;亦将文件型…

点云缩放(附open3d python代码)

1/ numpy 数组方法 通过将点云数组乘以一个缩放因子来改变大小, 同时通过加法运算实现质心平移。points = points/2.0#缩小到原来的一半 points[:, 0] = points[:, 0] + 20#质心平移到x=20处2/ open3d的缩放函数为scale,包含两个参数。 第一个参数是缩放的比例,即放大的倍数…

Kafka怎样完成建立和Broker之间的连接?

文章目录NetworkClient初始化1.基于Java NIO SocketChannel封装KafkaChannel2.Kafka提供的Selector是如何初始化跟Broker之间的连接的2.1 初始化SocketChannel&#xff0c;发起连接请求2.2 将发起连接请求后的SocketChannel缓存起来3.万能poll()方法之前的准备工作4. 通过不断轮…

win11电脑加密文件夹的两种方法

为了保证隐私安全&#xff0c;很多用户都会给文件夹设置密码&#xff0c;只有输对密码才能进入文件夹&#xff0c;那么升级到Win11新系统要怎么操作呢&#xff1f;下面小编就给大家带来两种加密方式&#xff0c;任你挑选。 方法一&#xff1a; 1、首先去找到要加密的文件夹。 2…

Java企业微信对接

最近项目中要对接企业微信&#xff0c;实现通讯录数据同步&#xff0c;即在企业端添加编辑删除用户&#xff0c;部门数据要同步到微信端&#xff0c;同时微信端添加编辑删除用户&#xff0c;部门数据要同步到企业端&#xff0c;实现数据同步功能&#xff0c;需要调用企业微信AP…

DDD的简单落地实现

目录 概述 和微服务的联系 具体划分 遵循依赖倒置原则 其他规范 具体实现代码 总结 概述 领域式驱动&#xff08;DDD&#xff09; 这种模式的核心就是根据功能去划分领域&#xff0c;然后在这个领域内只做这个领域的事情。 和微服务的联系 和微服务有什么类似的地方&am…