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;
}
}
}
判断网络文件是否存在,获取网络文件大小,创建时间、修改时间
于 2022-05-28 13:53:18 首次发布