C# 实现远程判断文件是否存在

定义了一个名为 CheckFileModifiedWithETag 的方法来检查远程文件是否通过 ETag 发生了修改。

在 Main 方法中,指定了要检查的远程文件的 URL ,然后调用 CheckFileModifiedWithETag 方法来获取文件是否被修改的结果,并根据结果输出相应的信息。

在 CheckFileModifiedWithETag 方法中:

创建一个 HttpWebRequest 对象,并将请求方法设置为 HEAD 。这意味着我们只获取文件的元数据,而不获取实际的文件内容,这样可以减少网络流量和提高效率。通过发送请求并获取响应,从响应的头信息中获取 ETag 的值。

假设我们之前已经获取并存储了本地记录的 ETag 值,将其与从服务器获取到的新的 ETag 值进行比较。

如果两个 ETag 值不同,说明文件在服务器端发生了修改,方法返回 true 。如果相同,则表示文件未被修改,方法返回 false 

在整个过程中,如果发生网络请求相关的异常,会进行相应的处理。如果异常是因为文件未找到(状态码为 HttpStatusCode.NotFound ),则直接返回 false 。对于其他类型的异常,会输出错误信息并重新抛出异常。

通过比较前后获取的 ETag 值,来判断远程文件是否被修改,从而实现了一种文件更新检查机制。

using System;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        string url = "http://example.com/your_file.txt";  // 替换为实际的远程文件 URL
        bool isModified = CheckFileModifiedWithETag(url);
        if (isModified)
        {
            Console.WriteLine("文件已被修改");
        }
        else
        {
            Console.WriteLine("文件未被修改");
        }
    }

    static bool CheckFileModifiedWithETag(string url)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "HEAD";

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                string etagServer = response.Headers["ETag"];

                // 获取并存储了本地记录的 ETag
                string etagLocal = "your_stored_etag"; 

                if (etagServer!= etagLocal)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch (WebException ex)
        {
            if (ex.Status == WebExceptionStatus.ProtocolError && ((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
            {
                return false;
            }
            Console.WriteLine("发生错误: " + ex.Message);
            throw;
        }
    }
}
声明 本站所有文章,如无特殊说明或标注,均为本站原创发布
任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站
本站上的资源来源于互联网,仅供网友学习交流,若您需要装载,请 附上原文链接
无意侵害您的权益,请发送邮件至 admin@7b2.dev 或点击右侧 私信:糖茶砌站 反馈,我们将尽快处理
茶馆

大学毕业了,始于202109,终于202407!

2024-7-6 22:37:34

CSharp

C# 阻止应用程序多开

2024-8-20 9:17:56

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索