zoukankan      html  css  js  c++  java
  • 使用C#WebClient类访问(上传/下载/删除/列出文件目录)

    在使用WebClient类之前,必须先引用System.Net命名空间,文件下载、上传与删除的都是使用异步编程,也可以使用同步编程,

    这里以异步编程为例:

    1)文件下载:

            static void Main(string[] args)
            {
                //定义_webClient对象
                WebClient _webClient = new WebClient();
                //使用默认的凭据——读取的时候,只需默认凭据就可以
                _webClient.Credentials = CredentialCache.DefaultCredentials;
                //下载的链接地址(文件服务器)
                Uri _uri = new Uri(@"http://192.168.1.103");
                //注册下载进度事件通知
                _webClient.DownloadProgressChanged += _webClient_DownloadProgressChanged;
                //注册下载完成事件通知
                _webClient.DownloadFileCompleted += _webClient_DownloadFileCompleted;
                //异步下载到D盘
                _webClient.DownloadFileAsync(_uri, @"D:	est.xlsx");
                Console.ReadKey();
            }
    
            //下载完成事件处理程序
            private static void _webClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
            {
                Console.WriteLine("Download Completed...");
            }
    
            //下载进度事件处理程序
            private static void _webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                Console.WriteLine($"{e.ProgressPercentage}:{e.BytesReceived}/{e.TotalBytesToReceive}");
            }
    

    2)文件上传:  

            static void Main(string[] args)
            {
                //定义_webClient对象
                WebClient _webClient = new WebClient();
                //使用Windows登录方式
                 _webClient.Credentials = new NetworkCredential("test", "123");
              
                //上传的链接地址(文件服务器)
                 Uri _uri = new Uri(@"http://192.168.1.103/test.doc");
                //注册上传进度事件通知
                _webClient.UploadProgressChanged += _webClient_UploadProgressChanged;
                //注册上传完成事件通知
                _webClient.UploadFileCompleted += _webClient_UploadFileCompleted;
                //异步从D盘上传文件到服务器
                _webClient.UploadFileAsync(_uri, "PUT", @"D:	est.doc");
                Console.ReadKey();
            }
            //下载完成事件处理程序
            private static void _webClient_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
            {
                Console.WriteLine("Upload Completed...");
            }
    
            //下载进度事件处理程序
            private static void _webClient_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
            {
                Console.WriteLine($"{e.ProgressPercentage}:{e.BytesSent}/{e.TotalBytesToSend}");
            }
    

     3)文件删除:  

            static void Main(string[] args)
            {
                //定义_webClient对象
                WebClient _webClient = new WebClient();
                //使用Windows登录方式
                 _webClient.Credentials = new NetworkCredential("test", "123");
                //上传的链接地址(文件服务器)
                Uri _uri = new Uri(@"http://192.168.1.103/test.doc");
                //注册删除完成时的事件(模拟删除)
                _webClient.UploadDataCompleted += _webClient_UploadDataCompleted;
                //异步从文件(模拟)删除文件
                _webClient.UploadDataAsync(_uri, "DELETE", new byte[0]);
                Console.ReadKey();
            }
            //删除完成事件处理程序
            private static void _webClient_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
            {
                Console.WriteLine("Deleted...");
            }
    

    4)列出文件(或目录):

     需引入命名空间:System.IO、System.Xml及System.Globalization

            static void Main(string[] args)
            {
    
                SortedList<string, ServerFileAttributes> _results = GetContents(@"http://192.168.1.103", true);
                //在控制台输出文件(或目录)信息:
                foreach (var _r in _results)
                {
                    Console.WriteLine($"{_r.Key}:
    Name:{_r.Value.Name}
    IsFolder:{_r.Value.IsFolder}");
                    Console.WriteLine($"Value:{_r.Value.Url}
    LastModified:{_r.Value.LastModified}");
                    Console.WriteLine();
                }
    
                Console.ReadKey();
            }
    
            //定义每个文件或目录的属性
            struct ServerFileAttributes
            {
                public string Name;
                public bool IsFolder;
                public string Url;
                public DateTime LastModified;
            }
    
            //将文件或目录列出来
            static SortedList<string, ServerFileAttributes> GetContents(string serverUrl, bool deep)
            {
                HttpWebRequest _httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
                _httpWebRequest.Headers.Add("Translate: f");
                _httpWebRequest.Credentials = CredentialCache.DefaultCredentials;
    
                string _requestString = @"<?xml version=""1.0"" encoding=""utf-8""?>" +
                      @"<a:propfind xmlns:a=""DAV:"">" +
                      "<a:prop>" +
                      "<a:displayname/>" +
                      "<a:iscollection/>" +
                      "<a:getlastmodified/>" +
                      "</a:prop>" +
                      "</a:propfind>";
    
                _httpWebRequest.Method = "PROPFIND";
                if (deep == true)
                    _httpWebRequest.Headers.Add("Depth: infinity");
                else
                    _httpWebRequest.Headers.Add("Depth: 1");
                _httpWebRequest.ContentLength = _requestString.Length;
                _httpWebRequest.ContentType = "text/xml";
    
                Stream _requestStream = _httpWebRequest.GetRequestStream();
                _requestStream.Write(Encoding.ASCII.GetBytes(_requestString), 0, Encoding.ASCII.GetBytes(_requestString).Length);
                _requestStream.Close();
    
                HttpWebResponse _httpWebResponse;
                StreamReader _streamReader;
                try
                {
                    _httpWebResponse = (HttpWebResponse)_httpWebRequest.GetResponse();
                    _streamReader = new StreamReader(_httpWebResponse.GetResponseStream());
                }
                catch (WebException ex)
                {
                    throw ex;
                }
    
                StringBuilder _stringBuilder = new StringBuilder();
    
                char[] _chars = new char[1024];
                int _bytesRead = 0;
    
                _bytesRead = _streamReader.Read(_chars, 0, 1024);
    
                while (_bytesRead > 0)
                {
                    _stringBuilder.Append(_chars, 0, _bytesRead);
                    _bytesRead = _streamReader.Read(_chars, 0, 1024);
                }
                _streamReader.Close();
    
                XmlDocument _xmlDocument = new XmlDocument();
                _xmlDocument.LoadXml(_stringBuilder.ToString());
    
                XmlNamespaceManager _xmlNamespaceManager = new XmlNamespaceManager(_xmlDocument.NameTable);
                _xmlNamespaceManager.AddNamespace("a", "DAV:");
    
                XmlNodeList _nameList = _xmlDocument.SelectNodes("//a:prop/a:displayname", _xmlNamespaceManager);
                XmlNodeList _isFolderList = _xmlDocument.SelectNodes("//a:prop/a:iscollection", _xmlNamespaceManager);
                XmlNodeList _lastModifyList = _xmlDocument.SelectNodes("//a:prop/a:getlastmodified", _xmlNamespaceManager);
                XmlNodeList _hrefList = _xmlDocument.SelectNodes("//a:href", _xmlNamespaceManager);
    
                SortedList<string, ServerFileAttributes> _sortedListResult = new SortedList<string, ServerFileAttributes>();
                ServerFileAttributes _serverFileAttributes;
    
                for (int i = 0; i < _nameList.Count; i++)
                {
                    if (_hrefList[i].InnerText.ToLower(new CultureInfo("en-US")).TrimEnd(new char[] { '/' }) != serverUrl.ToLower(new CultureInfo("en-US")).TrimEnd(new char[] { '/' }))
                    {
                        _serverFileAttributes = new ServerFileAttributes();
                        _serverFileAttributes.Name = _nameList[i].InnerText;
                        _serverFileAttributes.IsFolder = Convert.ToBoolean(Convert.ToInt32(_isFolderList[i].InnerText));
                        _serverFileAttributes.Url = _hrefList[i].InnerText;
                        _serverFileAttributes.LastModified = Convert.ToDateTime(_lastModifyList[i].InnerText);
                        _sortedListResult.Add(_serverFileAttributes.Url, _serverFileAttributes);
                    }
                }
                return _sortedListResult;
            }
        }
    

      

  • 相关阅读:
    670. Maximum Swap
    653. Two Sum IV
    639. Decode Ways II
    636. Exclusive Time of Functions
    621. Task Scheduler
    572. Subtree of Another Tree
    554. Brick Wall
    543. Diameter of Binary Tree
    535. Encode and Decode TinyURL
    博客园自定义背景图片
  • 原文地址:https://www.cnblogs.com/lgx5/p/10242560.html
Copyright © 2011-2022 走看看