判断网络文件是否存在,获取网络文件大小,创建时间、修改时间

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;

namespace Sci
{
    /// <summary>
    /// 网络文件处理工具
    /// </summary>
    class WebFile
    {
        /// <summary>
        /// 判断网络文件是否存在
        /// </summary>
        /// <param name="url"></param>
        public static bool fileExist(string url)
        {
            return getFileLen(url) != -1;
        }

        /// <summary>
        /// 获取网络文件大小
        /// </summary>
        /// <param name="url">文件网址</param>
        /// <returns></returns>
        public static long getFileLen(string url)
        {
            try
            {
                WebRequest request = WebRequest.Create(url);
                //request.Timeout = 200;
                WebResponse response = request.GetResponse();

                return response.ContentLength;  // 文件大小
                //return response.ContentType;  // 文件类型
            }
            catch (Exception)
            {
                return -1;  // 文件不存在
            }
        }

        /// [Accept-Ranges, bytes]
        /// [Content-Length, 13927]
        /// [Content-Type, application/x-zip-compressed]
        /// [Date, 2022-05-28 12:32:59]                     // 服务器当前日期时间
        /// [ETag, "9258b93b05ed81:0"]
        /// [Last-Modified, 2022-05-02 16:40:10]            // 最后修改时间
        /// [Server, Microsoft-IIS/8.5]
        /// [X-Powered-By, ASP.NET]

        /// <summary>
        /// 获取网络文件属性信息,如:getFileInfo(url)["Last-Modified"];
        /// </summary>
        /// <param name="url">文件网址</param>
        /// <returns></returns>
        public static Dictionary<string, string> getFileInfo(string url)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            try
            {
                WebRequest request = WebRequest.Create(url);
                //request.Timeout = 200;
                WebResponse response = request.GetResponse();

                WebHeaderCollection col = response.Headers;
                foreach (string key in col.Keys)
                {
                    string value = col.Get(key);
                    if (value.EndsWith(" GMT")) value = DateTime.Parse(value).ToString("yyyy-MM-dd HH:mm:ss");
                    if (!dic.ContainsKey(key)) dic.Add(key, value);
                }
            }
            catch (Exception)
            {
            }
            return dic;
        }


        /// <summary>
        /// 判断webUrl中的文件和本地文件localPath是否相同(按大小+修改时间判断)
        /// </summary>
        /// <param name="webUrl"></param>
        /// <param name="localPath"></param>
        /// <returns></returns>
        public static bool IsSameFile(string webUrl, string localPath)
        {
            //bool networkAvaliable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
            try
            {
                // 获取网络文件信息
                var dic = WebFile.getFileInfo(webUrl);
                if (dic.Count == 0 && !System.IO.File.Exists(localPath)) return true;  // 文件都不存在
                string webLen = dic.ContainsKey("Content-Length") ? dic["Content-Length"] : "0";
                string webTime = dic.ContainsKey("Last-Modified") ? dic["Last-Modified"] : "";
                long webTicks = dic.ContainsKey("Last-Modified") ? DateTime.Parse(webTime).Ticks : DateTime.Now.Ticks;

                // 获取本地文件信息
                System.IO.FileInfo info = new System.IO.FileInfo(localPath);
                string localLen = info.Length + "";
                long localTicks = info.LastWriteTime.Ticks;
                if (localLen.Equals(webLen) && localTicks >= webTicks) return true;     // 文件大小相同,且最后修改时间大于等于网络文件的时间
            }
            catch { }
            return false;
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值