using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text; namespace TJCFinanceWriteOff.BizLogic.Common
{
public class FileUtil
{ /// <summary>
/// 将文件转换为base64String
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
public static string GetFileBase64(string filePath)
{
filePath = filePath ?? throw new ArgumentException("文件路径错误"); try
{
using(FileStream fs = File.OpenRead(filePath))
{
return GetFileBase64(fs);
}
}
catch (Exception ex)
{
throw;
}
} /// <summary>
/// 将文件转换为base64String
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
public static string GetFileBase64(Stream stream)
{
stream = stream ?? throw new ArgumentException("参数不能为空"); try
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(, SeekOrigin.Begin);
return Convert.ToBase64String(bytes,, bytes.Length);
}
catch (Exception ex)
{
throw;
}
} /// <summary>
/// 计算文件的MD5值
/// 用做于缓存Key
/// </summary>
/// <param name="arg">类型只能为string or stream,否则将会抛出错误</param>
/// <returns>文件的MD5值</returns>
public static string GetFileMd5(object arg)
{
MD5 md5Hash = MD5.Create();
byte[] data = null; switch (arg)
{
case string str:
data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(str));
break;
case Stream stream:
data = md5Hash.ComputeHash(stream);
break;
case null:
throw new ArgumentException("参数不能为空");
default:
throw new ArgumentException("参数类型错误");
}
StringBuilder sBuilder = new StringBuilder();
for (int i = ; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
md5Hash.Dispose();
return sBuilder.ToString();
} /// <summary>
/// 遍历文件夹获取文件路径
/// </summary>
/// <param name="direPath"></param>
/// <returns></returns>
public static DataTable GetFilesByDirePath(string direPath)
{
DirectoryInfo folder = new DirectoryInfo(direPath);
if (!folder.Exists)
{
throw new DirectoryNotFoundException("文件夹不存在!");
} var datas = (from x in folder.GetFiles()
where x.Extension == ".jpg" || x.Extension == ".jpeg"
orderby int.Parse(x.Name.Split('.')[])
select x.FullName).ToArray(); var dt = new DataTable();
dt.Columns.Add("序号", typeof(int));
dt.Columns.Add("扫描图片", typeof(string));
dt.Columns.Add("识别结果", typeof(string));
DataRow dr = null;
for (int i = ; i < datas.Length; i++)
{
dr = dt.NewRow();
dr[] = i + ;
dr[] = datas[i];
dr[] = "未扫描";
dt.Rows.Add(dr);
}
return dt;
} /// <summary>
/// 将DataTable中的数据转换为base64集合
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string[] GetFilesBase64(DataTable dt)
{
List<string> filesBase64Array = new List<string>();
foreach (DataRow item in dt.Rows)
{
filesBase64Array.Add(GetFileBase64(item["扫描图片"].ToString()));
}
return filesBase64Array.ToArray();
} /// <summary>
/// 将图片List以正面 反面 分割
/// </summary>
/// <param name="source">源数据List</param>
/// <param name="obverse">正面图片集合</param>
/// <param name="reverse">反面图片集合</param>
public static void SplitList(List<string> source, out List<string> obverse, out List<String> reverse)
{
//1.将List一分为二
obverse = source.Take(source.Count / ).ToList();
reverse = source.Skip(source.Count / ).ToList();
reverse.Reverse();
} /// <summary>
/// 将图片List以正面 反面 分割 (备用)
/// </summary>
/// <param name="source">源数据List</param>
/// <param name="obverse">正面图片集合</param>
/// <param name="reverse">反面图片集合</param>
public static void SplitListBackup(List<string> source, out List<string> obverse, out List<String> reverse)
{
//1.将List一分为二并翻转
obverse = new Queue<string>(source.Take(source.Count / )).ToList();
reverse = new Stack<string>(source.Skip(source.Count / )).ToList();
}
}
}

c# base64及MD5工具类的更多相关文章

  1. MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

    MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.Fi ...

  2. Base64加密解密工具类

    使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...

  3. ios Base64编解码工具类及使用

    为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...

  4. MD5 工具类

    package com.payease.chains.risk.utils; /** * md5密码加密工具类 * Created by liuxiaoming on 2017/8/28. */ pu ...

  5. java MD5工具类

    package com.common.tools; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * @a ...

  6. MD5工具类-详细

    public class MD5Code { /* * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static * final是表 ...

  7. MD5工具类

    package com.liu.hellomavenweb.util; import java.security.MessageDigest; /** * * @author 刘楠 * */ publ ...

  8. 对指定文件生成数字摘要的MD5工具类

    md5特点:压缩性.不可逆性,经常用于传值过程中的值加密或文件加密static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', ...

  9. 170405、java版MD5工具类

    package com.rick.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...

随机推荐

  1. 2019.6.28 校内测试 T1 Jelly的难题1

    这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能AC): 按照“题意解释”的思路来思考这个题,那么就十分的简单了: 1.首先要读入这个字符矩阵,可以用cin ...

  2. IntelliJ IDEA 设置忽略SVN文件和文件夹

       IntelliJ IDEA 在提交文件至SVN时,可以设置忽略某些文件和文件夹,以免误提交不需要提交的文件.最后,插个题外话,介绍一下如何设置代码默认折叠或者展开.下面使用IntelliJ ID ...

  3. BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...

  4. Java并发指南14:Java并发容器ConcurrentSkipListMap与CopyOnWriteArrayList

    原文出处http://cmsblogs.com/ 『chenssy』 到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash.TreeMap,这两种数据结构各自都有着优缺 ...

  5. MYSQL数据库基础概念

    数据库的发展史 1.萌芽阶段:文件系统 使用磁盘文件来存储数据2.初级阶段:第一代数据库 出现了网状模型.层次模型的数据库3.中级阶段:第二代数据库 关系型数据库和结构化查询语言4.高级阶段:新一代数 ...

  6. centos7 设置 防火墙 开机自启

    CentOS 7.0默认使用的是firewall作为防火墙,之前版本是使用iptables. 1.设置firewall开机启动 systemctl enable firewalld 2.禁止firew ...

  7. 数据库中的几个概念 - LGWR, ARCH,ASYNC,SYNC,AFFIRM

    双机热备(双机容错)就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务.当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务 双 ...

  8. Swift 析构过程

    在一个类的实例被释放之前,析构函数被立即调用.用关键字deinit来标示析构函数,类似于初始化函数用init来标示.析构函数只适用于类类型. 析构过程原理 Swift 会自动释放不再需要的实例以释放资 ...

  9. 在基于Android以及Jetson TK平台上如何写32位的Thumb-2指令

    由于Android以及Jetson TK的编译工具链中的汇编器仍然不支持大部分的32位Thumb-2指令,比如add.w,因此我们只能通过手工写机器指令码来实现想要的指令.下面我将简单地介绍如何在AR ...

  10. Json_DataMember签名作用

    [DataContract] public class ApiResponse { [DataMember] public string Time { get; set; } } 序列化和反序列,如果 ...