欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

c# 在windows中操作IIS设置FTP服务器的示例

时间:2022-11-27 10:21:42|栏目:.NET代码|点击:

什么是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 site
                      ftpsite.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代表FTP
            continue;
          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代表FTP
              continue;
            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;
    }

上一篇:C#多线程之线程中止Abort()方法

栏    目:.NET代码

下一篇:C#反序列化到类的实现方法

本文标题:c# 在windows中操作IIS设置FTP服务器的示例

本文地址:http://www.codeinn.net/misctech/220000.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有