文档章节

C#文件相同性判断

彭泽0902
 彭泽0902
发布于 2016/11/24 18:47
字数 531
阅读 1
收藏 0

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

    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);
                }
            }
        }

 

© 著作权归作者所有

共有 人打赏支持
彭泽0902
粉丝 0
博文 44
码字总数 57771
作品 0
武汉
高级程序员
私信 提问
bzoj4569: [Scoi2016]萌萌哒【稀疏表+并查集】

解题思路: 考虑暴力就是 用并查集维护那些位置要填的数字相同,若最后有 个集合,那 (第一个集合填不能填0)。 考虑类似ST表的方法,第 层把每个区间划分成前 位和后 位,各看做一块。两个...

cdsszjj
01/11
0
0
Mozilla 新 CEO 的离职之路

火狐新CEO布兰登·艾希,在上任仅11天后就被宣布离职。这一切都始于何处,是什么导致这位Mozilla联合创始人的离开?当公司和它领导者的价值观相冲突时,会发生什么? 旧金山一个下着雨的清晨...

oschina
2014/04/05
2.1K
20
delphi 与 php 相关连的知识点总结.

为了维护xampps这项目, delphi还必须得会那么一点. 总不能碰到问题就问人吧, 感觉太不长进了. 经过几天的努力编写与学习, 以站在php角度来思考delphi, 感觉php强大的确是真理. 但delphi的理念...

Tuesday
2013/12/12
0
1
初接触Linux,LNMMP服务安装与构建

今天给大家带来的是LNMMP服务 一.LNMMP 什么是LNMMP? LNMMP是相当于一个组合的名字,就像Beyond!每个人都是单独的个体,但组合起来就不是简单的1+1层次的问题。 LNMMP(Linux Nginx Memca...

王丶Blue
2014/04/27
0
0
一张照片就能判断性取向!人工智能这算侵犯个人隐私吗?

人工智能,简称AI,可以通过已有数据总结经验,从而对未知事情做出把握判断。 现在的人工智能,真的是越来越全能,别说什么写诗、画画、确诊疾病了,据悉,通过一张照片,就能判断出此人的性...

链知道
09/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
13
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部