当前位置: 首页 > news >正文

C#文件相同性判断

  在进行开发时,对文件进行上传和下载是较为普遍的行为,为了防止在文件操作过程中,出现同一文件多次操作,需要对文件进行相同性比较:

    1.获取文件的绝对路径,针对window程序和web程序都可使用:

  

 /// <summary>
        /// 获取文件的绝对路径,针对window程序和web程序都可使用
        /// </summary>
        /// <param name="relativePath">相对路径地址</param>
        /// <returns>绝对路径地址</returns>
        public static string GetAbsolutePath(string relativePath)
        {
            if (string.IsNullOrEmpty(relativePath))
            {
                throw new ArgumentNullException("参数relativePath空异常!");
            }
            relativePath = relativePath.Replace("/", "\\");
            if (relativePath[0] == '\\')
            {
                relativePath=relativePath.Remove(0, 1);
            }
            //判断是Web程序还是window程序
            if (HttpContext.Current != null)
            {
                return Path.Combine(HttpRuntime.AppDomainAppPath, relativePath);
            }
            else
            {
                return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, relativePath);
            }
        }

   2.获取文件的绝对路径,针对window程序和web程序都可使用:

   

 /// <summary>
        /// 获取文件的绝对路径,针对window程序和web程序都可使用
        /// </summary>
        /// <param name="relativePath">相对路径地址</param>
        /// <returns>绝对路径地址</returns>
        public static string GetRootPath()
        {
            //判断是Web程序还是window程序
            if (HttpContext.Current != null)
            {
                return HttpRuntime.AppDomainAppPath;
            }
            else
            {
                return AppDomain.CurrentDomain.BaseDirectory;
            }
        }

   3.通过文件Hash 比较两个文件内容是否相同:

    

  /// <summary>
        /// 通过文件Hash 比较两个文件内容是否相同
        /// </summary>
        /// <param name="filePath1">文件1地址</param>
        /// <param name="filePath2">文件2地址</param>
        /// <returns></returns>
        public static bool isValidFileContent(string filePath1, string filePath2)
        {
            //创建一个哈希算法对象 
            using (HashAlgorithm hash = HashAlgorithm.Create())
            {
                using (FileStream file1 = new FileStream(filePath1, FileMode.Open), file2 = new FileStream(filePath2, FileMode.Open))
                {
                    byte[] hashByte1 = hash.ComputeHash(file1);//哈希算法根据文本得到哈希码的字节数组 
                    byte[] hashByte2 = hash.ComputeHash(file2);
                    string str1 = BitConverter.ToString(hashByte1);//将字节数组装换为字符串 
                    string str2 = BitConverter.ToString(hashByte2);
                    return (str1 == str2);//比较哈希码 
                }
            }
        }

  4.计算文件的hash值 用于比较两个文件是否相同:

  

 /// <summary>
        /// 计算文件的hash值 用于比较两个文件是否相同
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <returns>文件hash值</returns>
        public static string GetFileHash(string filePath)
        {
            //创建一个哈希算法对象 
            using (HashAlgorithm hash = HashAlgorithm.Create())
            {
                using (FileStream file = new FileStream(filePath, FileMode.Open))
                {
                    //哈希算法根据文本得到哈希码的字节数组 
                    byte[] hashByte= hash.ComputeHash(file);
                    //将字节数组装换为字符串  
                    return BitConverter.ToString(hashByte);
                }
            }
        }

 

相关文章:

  • Struts2日期类型转换
  • 新建一个文章
  • MySql(三): 覆盖索引( Covering Index )
  • Shell脚本编程30分钟入门
  • 【转】浅谈JavaScript、ES5、ES6
  • 股票操作指南
  • [译]声明式编程:它是一个真实的东西?
  • android 5.0 水波纹 实现
  • 多线程包:java.util.concurrent,
  • Openstack的vnc界面定制
  • android 6.0权限检测和请求
  • dirname ${BASH_SOURCE[0]}
  • ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
  • Git引用
  • 定位(position)
  • [译]CSS 居中(Center)方法大合集
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 2017届校招提前批面试回顾
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • classpath对获取配置文件的影响
  • HTTP中GET与POST的区别 99%的错误认识
  • java正则表式的使用
  • JS函数式编程 数组部分风格 ES6版
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Spring Cloud Feign的两种使用姿势
  • Spring框架之我见(三)——IOC、AOP
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue ES6 Jade Scss Webpack Gulp
  • Webpack 4x 之路 ( 四 )
  • 程序员该如何有效的找工作?
  • 复杂数据处理
  • 前端路由实现-history
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 数据结构java版之冒泡排序及优化
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 优秀架构师必须掌握的架构思维
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ionic入门之数据绑定显示-1
  • MyCAT水平分库
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #LLM入门|Prompt#3.3_存储_Memory
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (SpringBoot)第七章:SpringBoot日志文件
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (九)One-Wire总线-DS18B20
  • .gitignore文件设置了忽略但不生效
  • .NET Micro Framework初体验
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net多线程总结
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • /etc/skel 目录作用
  • @DependsOn:解析 Spring 中的依赖关系之艺术