使用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:\test.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:\test.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}:\r\nName:{_r.Value.Name}\r\nIsFolder:{_r.Value.IsFolder}");
Console.WriteLine($"Value:{_r.Value.Url}\r\nLastModified:{_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;
}
}
使用C#WebClient类访问(上传/下载/删除/列出文件目录)的更多相关文章
- 使用C#WebClient类访问(上传/下载/删除/列出文件目录)由IIS搭建的http文件服务器
前言 为什么要写这边博文呢?其实,就是使用C#WebClient类访问由IIS搭建的http文件服务器的问题花了我足足两天的时间,因此,有必要写下自己所学到的,同时,也能让广大的博友学习学习一下. 本 ...
- SpringMVC ajax技术无刷新文件上传下载删除示例
参考 Spring MVC中上传文件实例 SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传 Spring MVC 文件上传下载 (FileOperateUtil.ja ...
- java FTP 上传下载删除文件
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- [FTP] FTPClient--FTP操作帮助类,上传下载,文件,目录操作 (转载)
点击下载 FTPClient.zip 这个类是关于FTP客户端的操作1.构造函数 2.字段 服务器账户密码3.属性4.链接5.传输模式6.文件操作7.上传和下载8.目录操作9.内容函数看下面代码吧 / ...
- C# FTPClient--FTP操作帮助类,上传下载,文件,目录操作
FROM :http://www.sufeinet.com/forum.php?mod=viewthread&tid=1736&extra=page%3D1%26filter%3Dty ...
- C# WebClient 的文件上传下载
上传文件 string path = openFileDialog1.FileName; WebClient wc = new WebClient(); wc.Credentials = Creden ...
- [C#]工具类—FTP上传下载
public class FtpHelper { /// <summary> /// ftp方式上传 /// </summary> public static int Uplo ...
- FastDFSClient工具类 文件上传下载
package cn.itcast.fastdfs.cliennt; import org.csource.common.NameValuePair; import org.csource.fastd ...
- Win10 搭建FTP环境,并使用Java实现上传,下载,删除
测试的环境一般都是在自己电脑上面装的,现在一般都使用Win10开发 搭建FTP: 第一步:打开控制面板:点击程序 第二步: 第三步: 然后点击确认后等待完成 完成后在启动中找到IIS管理器 打开 在网 ...
随机推荐
- C#--串行化与反串行化
串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性,就 ...
- vsphere 5.1 改进和SSO理解
虚拟交换器 以5.1版的vSphere而言,VMware在VDS上提供一些新功能.例如,现在可以用快照的方式,来备份还原VDS组态及网络端口群组(port group)的组态,以因应vCenter S ...
- PYQT实现简单的浏览器功能
主要的类 QMainWindow 提供一个有菜单条.锚接窗口(例如工具条)和一个状态条的主应用程序窗口. http://www.kuqin.com/qtdocument/qmainwindow.htm ...
- tornado url配置
Note tornado是支持虚拟主机的,在同一端口上根据域名区分app http://www.tornadoweb.org/en/stable/web.html#application-config ...
- adb remount 失败:remount failed: Operation not permitted
adb remount 失败:remount failed: Operation not permitted 关于ADB的使用,这里再说明下:经常使用命令 adb shell - 登录设备sh ...
- java byte数组与16进制间的相互转换
java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...
- ArcGIS进行自定义投影转换(重投影)
这里记录一下使用自定义七参数进行投影转换的过程. 1.主动创建自定义地理(坐标)变换 首先在系统工具箱里面选择创建自定义地理(坐标)变换 在弹出的窗口中输入相关参数即可. 转换方法选择COORDINA ...
- WD backup西部盘数据备份
西部数据(WD),硬盘备份数据!防止数据丢失.损坏.... 起因: 电脑上存储很多资料,之前有500G的东芝硬盘(现在插头不灵敏),故决定换个好点的1T硬盘.电脑在一夜间打不开,不能识别硬盘!怎么重启 ...
- sshd服务分析
00.阐述 sshd 服务 基本上,所有的 ssh 相关设定都放在 /etc/ssh/sshd_config 里面!不过,每个 Linux distribution 的预设设定都不太相同, 所以我们有 ...
- Ubuntu x86-64汇编(5) 控制指令
控制指令 Control Instructions 汇编的控制指令主要包含标签, 无条件跳转和有条件跳转几种 标签 Label 标签用于标记跳转的目的, 必须以字母开头, 后面跟着字母, 数字和下划线 ...