C#如何在Windows中操作IIS设置FTP服务器

什么是FTP

FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以将 Internet 信息服务 (IIS) 配置为作为 FTP 服务器来运行。 这样,其他计算机便可以连接到服务器并将文件复制到服务器或者从服务器复制文件。 例如,如果您在自己的计算机上承载网站,并且希望允许远程用户连接到您的计算机并将他们的文件复制到服务器,则可以将 IIS 配置为充当 FTP 服务器。

主要实现方式

下面主要讲解一下,在Window的IIS中创建FTP的Site。

1、创建站点

 public int createFtpSite(string ftpname,string path){int errorCode = ErrorCode.Succeed;if (ftpname == "" && path == ""){try{ServerManager iisManager = new ServerManager();Configuration cfg = iisManager.GetApplicationHostConfiguration();/*---- 停止21端口 ----*/try{/*---- sites ----*/foreach (var ftpsite in iisManager.Sites){/** 站点描述*/string sitename = ftpsite.Name;/** 站点绑定域名和端口*/foreach (Binding binding in ftpsite.Bindings){try{string currentServerBindings = binding.GetAttributeValue("BindingInformation").ToString();string port = currentServerBindings.Split(":".ToArray())[1];if (port == "21"){try{//stop siteftpsite.Stop();}catch{//doing nothing}break;}}catch{//doing nothing}}}//提交更改iisManager.CommitChanges();}catch{//do nothing}/** 创建FTP*/if (!System.IO.Directory.Exists(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath")))//创建站点路径{System.IO.Directory.CreateDirectory(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));}Site site = iisManager.Sites.Add(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp"), "ftp", string.Format("*:{0}:", "21"), System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));iisManager.CommitChanges();//设置FTP SSL权限SetFtpSSL();//设置FTP Everyone权限IISUtil.IISCore.AddSiteUtil addsiteUtil = new AddSiteUtil();try{string config_rootpath = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath");//string rootpath = path.Substring(0, path.IndexOf(ftpname) - 1) + "\\ftproot";if (!System.IO.Directory.Exists(config_rootpath)){System.IO.Directory.CreateDirectory(config_rootpath);}addsiteUtil.icaclsSet("Everyone", System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));/*---- hide ----*/System.IO.File.SetAttributes(config_rootpath, System.IO.FileAttributes.Hidden);}catch{}}catch{errorCode = ErrorCode.ftpSiteFail;}}else{if (!getFtpState(ftpname))//判断ftp用户是否存在{/*---- FTP状态检查 ----*/FtpStateInit();try{using (ServerManager iisManager = new ServerManager()){Site site = iisManager.Sites.FirstOrDefault(o => ((string)o["name"]).Contains(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp")));var vird = site.Applications[0].VirtualDirectories["/" + ftpname];if (vird == null) { site.Applications[0].VirtualDirectories.Add("/" + ftpname, path); }else { errorCode = ErrorCode.ftpExists; }iisManager.CommitChanges();//添加FTP访问权限SetFtpAccess(ftpname);}}catch{errorCode = ErrorCode.ftpSiteFail;}}else{errorCode = ErrorCode.ftpExists;}}return errorCode;}

2、站点列表

/// <summary>/// iis6获取所有ftp站点信息/// </summary>/// <param name="newsitename"></param>/// <returns></returns>public static List<string> iGetFtpInfos(){List<string> ftpinfos = new List<string>();try{string ftproot = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");string ftpname = "";//用户名string ftppass = "";//密码string ftppath = "";//物理路径string iisversion = "";//iis版本string majorversion = IISCore.IISInfoUtil.SGetIISMajorVersion();if (majorversion == ""){iisversion = "未知";}else{iisversion = majorversion.ToString();}/** 创建FTP 子站点*/var siteEntry = new DirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象DirectoryEntry rootentry = new DirectoryEntry("IIS://localhost/W3SVC");//创建IIS管理对象foreach (DirectoryEntry sitechild in siteEntry.Children){if (!sitechild.SchemaClassName.EqualsEx("IIsFtpServer"))    //IIsFtpServer代表FTPcontinue;string yftpname = sitechild.Properties["ServerComment"].Value.ToString();string defaultftpname = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");if (yftpname == defaultftpname){try{//获取站点信息var root = sitechild.Children.Find("ROOT", "IIsFtpVirtualDir");DirectoryEntries ftps = root.Children;foreach (DirectoryEntry ftp in ftps){ftpname = ftp.Name;/** 获取密码*/try{/** 循环站点获取站点信息*/foreach (DirectoryEntry child in rootentry.Children){if (child.SchemaClassName == "IIsWebServer" && child.Properties["ServerComment"].Value.ToString() == ftpname){ftppass = child.Properties["AnonymousUserPass"].Value.ToString();/** 获取站点目录*/foreach (DirectoryEntry rootChild in child.Children){string name = rootChild.Name.ToString();if ((rootChild.SchemaClassName == "IIsWebVirtualDir") && (rootChild.Name.ToString().ToLower() == "root")){if (rootChild.Properties["Path"].Value == null){ftppath = "";}else{ftppath = rootChild.Properties["Path"].Value.ToString().Substring(0, rootChild.Properties["Path"].Value.ToString().LastIndexOf("\\"));}}}}}}catch{}/** 获取路径*/if(ftpname != "")ftpinfos.Add(ftproot + "-@-" + ftpname + "-@-" + ftppass + "-@-" + ftppath + "-@-" + iisversion);//添加到站点信息}}catch{}}}}catch{}return ftpinfos;//返回数据}

3、删除站点

  public static bool DeleteQFtp(string ftpname){bool flag = false;try{/** 删除FTP 子站点*/var siteEntry = new DirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象if (ftpname != ""){foreach (DirectoryEntry sitechild in siteEntry.Children){if (!sitechild.SchemaClassName.EqualsEx("IIsFtpServer"))    //IIsFtpServer代表FTPcontinue;string yftpname = sitechild.Properties["ServerComment"].Value.ToString();if (yftpname.ToLower() == System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp").ToLower()){try{DirectoryEntry root = sitechild.Children.Find("ROOT", "IIsFtpVirtualDir");var ftpchild = root.Children.Find(ftpname, "IIsFtpVirtualDir");if (ftpchild != null){//删除root.Children.Remove(ftpchild);root.CommitChanges();sitechild.CommitChanges();siteEntry.CommitChanges();flag = true;}}catch{flag = false;}}}}}catch{}return flag;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这是一份编程宝典,请查收!

最近&#xff0c;小编一直在整理有关编程的书籍&#xff0c;有Android、C、Java、PHP、木马、算法等类型的书籍。现在&#xff0c;小编准备将这些资料免费分享给大家&#xff01;Android应用开发入门教程&#xff08;经典版&#xff09;易学CC语言解惑HTML入门教程Java解惑&…

近期资料分享汇总,还不快来看看你漏了哪份没拿?

相信&#xff0c;一直关注着我们的同学们都知道&#xff0c;小思妹分享了好多好多的资料给大家。为了方便新来的同学自取&#xff0c;小思妹又重新整理了一遍&#xff0c;直接点以下标题即可跳转&#xff01;这是我见过的最全的训练数据集&#xff0c;没有之一&#xff01;送你…

MS Learn 宝藏资源库 - 学习经验分享

点击蓝字关注我们作者&#xff1a;刘轶民大家好&#xff0c;我是东北电力大学的一名在校学生&#xff0c;我叫刘轶民&#xff0c;很高兴能以 MS Learn 的受益者的身份&#xff0c;来分享一些经验与看法。作为正在上学的我来讲&#xff0c;很多时候我可能更多的去面临着新技术的…

你必须知道的28个HTML5特征、窍门和技术

Jeffrey Way曾发表过一篇博文《28 HTML5 Features, Tips, and Techniques you Must Know 》讲述了28个HTML5特征、窍门和技术&#xff0c;张鑫旭将本文进行了翻译&#xff0c;现转载于此&#xff0c;全文如下&#xff1a;前端的发展如此之迅猛&#xff0c;一不留神&#xff0c;…

一起读懂传说中的经典:受限玻尔兹曼机

尽管性能没有流行的生成模型好&#xff0c;但受限玻尔兹曼机还是很多读者都希望了解的内容。这不仅是因为深度学习的复兴很大程度上是以它为前锋&#xff0c;同时它那种逐层训练与重构的思想也非常有意思。本文介绍了什么是受限玻尔兹曼机&#xff0c;以及它的基本原理&#xf…

NET问答: 发布 asp.net core 时如何修改 ASPNETCORE_ENVIRONMENT 环境变量?

咨询区 Dario&#xff1a;当我把 asp.net core web 发布到本地文件时&#xff0c;我发现程序读的是 appsettings.Production.json ,也就说明当前的 ASPNETCORE_ENVIRONMENT Production。请问如何动态修改 ASPNETCORE_ENVIRONMENT 的值&#xff0c;这样的话在 调试 和 发布 阶段…

注释里的诅咒:哪种语言遭受最多的咒骂?

导读&#xff1a;原文作者Scott Gilbertson在webmonkey.com发表一篇《Cussing in Commits: Which Programming Language Inspires the Most Swearing?》&#xff0c;由外刊IT评论整理翻译《注释里的诅咒&#xff1a;哪种语言遭受最多的咒骂&#xff1f;》。内容如下:任何一个程…

怎样快速掌握深度学习TensorFlow框架?

TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统&#xff0c;其命名来源于本身的运行原理。Tensor&#xff08;张量&#xff09;意味着N维数组&#xff0c;Flow&#xff08;流&#xff09;意味着基于数据流图的计算&#xff0c;TensorFlow实际上就是张量从流…

牛X,.NET6又双叒叕新版本,这是要起飞吗?

.NET6又双叒叕出新版本了&#xff0c;2月17号Preview1、3月11号Preview2、4月8号又Preview3了&#xff0c;密集的版本发布&#xff0c;各种新技术和改进优化&#xff0c;不禁要问一句&#xff0c;.NET6是要起飞吗&#xff1f;下面给大家科普下.NET6将带来的几大核心变化&#x…

用python挖一挖知乎上宅男们最喜欢的1000个妹子

在文章开始前&#xff0c;先来一张图给大家热热身。这里是宅男们最喜欢的妹子中排名前200位的头像&#xff08;实际193张图&#xff0c;部分不规则的图已被二胖过滤&#xff09;。排名不分先后哈&#xff01;快来看看有没有你们熟悉的面孔。找到眼熟的人了吗&#xff1f;说不定…

在 .NET 6 Preview 3 ASP.NET Core 更新

.NET 6 Preview 3现在可用了&#xff0c;其中包括对ASP.NET Core的许多重大改进。这是此预览版本中的新增功能&#xff1a;更小的SignalR&#xff0c;Blazor Server和MessagePack scripts启用 Redis 分析会话HTTP/3 endpoint TLS配置初版的 .NET Hot Reload 支持Razor编译器不再…

趣图:程序员桌面对比,iOS vs 安卓

程序员桌面对比&#xff0c;iOS vs 安卓↓↓↓数据与算法之美用数据解决不可能长按扫码关注

如何在 ASP.Net Core 中使用 HTTP.sys WebServer ?

ASP.Net Core 是一个开源的&#xff0c;跨平台的&#xff0c;轻量级模块化框架&#xff0c;可用它来构建高性能的Web程序&#xff0c;大家都知道 Kestrel 是 ASP.Net Core 内置的跨平台web服务器&#xff0c;但是它有一定的局限性&#xff0c;比如不支持 端口共享 , WebSockets…

百度移动联盟(munion)-广告平台投放流程详细介绍 (绿色通道)

1. 百度平台官网介绍&#xff1a; http://hi.baidu.com/mobads/blog/ ... 1c7fc3bc3e1e2e.html2. AdView 官网介绍&#xff1a; 为开发者提供“AdView-百度” 绿色通道审核&#xff1b;提供除百度分成外额外AdView渠道分成&#xff1b;赚取更多&#xff0c;更稳定的广告费用&a…

从一个骗局谈生活中的基础算法

曾经有一个著名的骗局&#xff1a;小明是一个赌马爱好者&#xff0c;最近他连续几次提前收到了预测赌马结果的邮件&#xff0c;从一开始由于不屑而错失良机&#xff0c;到渐渐深信不疑&#xff0c;直到最后给邮件发送方汇了巨款才发现上当。看过这个的人应该知道&#xff0c;骗…

用得最多的冒泡排序是不是少了个关键点?

前言冒泡排序应该是很多小伙伴的最爱&#xff0c;简单、直接、好理解&#xff1b;回顾以往参与和阅读的项目&#xff0c;凡是牵涉自定义排序的算法&#xff0c;很大一部分都在用冒泡&#xff0c;其中很多都忽略了一个关键点&#xff1b;来&#xff0c;咱们细细品…正文1. 冒泡排…

荐书 | 攻克世纪难题,拒绝领取菲尔兹奖的孤独数学天才的一生

今天小木给大家介绍五本数学科普文&#xff0c;了解了一些数学家研究数学、证明猜想的经历&#xff0c;他们的专研精神简直让小木五体投地&#xff01;这也验证了一句经典名言“念念不忘&#xff0c;必有回响”。希望我们都能把时间奉献给自己喜欢的事情上。下面&#xff0c;让…

C# 搭建自己的NuGet服务器,上传自定义NuGet包

第一步搭建NuGet服务器创建空Web项目安装Nuget服务&#xff0c;目前最新版本2.8.2安装完成&#xff0c;会自动生产服务&#xff0c;出现如下界面发布该网站&#xff0c;并部署至IIS将.nupkg文件发布至网站的Packages目录。在VS中修改NuGet引用路径注意把自定NuGet放在首位&…

在不同的ObjectContext中更新数据

第一个using中获取一些数据 User u; using (var db new Entities()) {u db.Users.First(); } 在using外改变 u.NickName "ABC"; 在第二个using中把改变更新到库 using (var db new Entities()) { …… db.SaveChanges(); } 在网上看了一些使用ApplyPropertyC…

5分钟理解一致性哈希算法

来自&#xff1a;cywosp链接&#xff1a;https://blog.csdn.net/cywosp/article/details/23397179一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希&#xff08;DHT&#xff09;实现算法&#xff0c;设计目标是为了解决因特网中的热点(Hot spot)问题&#xff0c;初衷…