环境
- .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