用C#实现FTP搜索引擎

news/2024/7/7 21:50:13

晚辈最近用C#写了一个教育网FTP搜索引擎,希望能得到高手的指点。

网址:http://soso.ccnu.com.cn      http://it.ccnu.edu.cn/soso

部分代码:

using System;
using softplib;
using System.Threading;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Data;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace spider
{
 /// <summary>
 /// IndexClass 的摘要说明。
 /// </summary>
 //编制索引类
 class IndexClass
 {
  private IPAddress ip;
  private string name;
  private SqlProcedure sp;
  public IndexClass(IPAddress _ip,string _name)
  {
   ip=_ip;
   name=_name;
  
  }

  public void createIndex()
  {
   FTPFactory ff = new FTPFactory();
   ff.setDebug(false);
   string header="ftp://"+ip.ToString();
   string address=name;
   try
   {
    ff.setRemoteHost(ip.ToString());
    ff.login();
    Queue q=new Queue();
    ArrayList fileNames=ff.getFileList("*.*");
    ArrayList subdirNames=ff.getSubdir("*",ref fileNames);
    if(fileNames!=null && fileNames.Count>0)
     foreach(string s in fileNames)
     {
     
      try
      {
       Console.WriteLine(header+"/"+s);
       int h=-1;
       long _size=0;
       try
       {
        _size=ff.getFileSize(s);
        h=s.IndexOf("/");
       }
       catch
       {
        _size=0;
        Console.WriteLine("size error");
       }


       if(s!=null && s.Trim()!="")
       {
        DataUnit datau=new DataUnit(s,_size,header+"/",DateTime.Now,ip.ToString(),address);
        Class1.DataQueue.Enqueue(datau);
       }
      }
      catch(Exception ex){Console.WriteLine(ex.Message);};
     }
    if(subdirNames!=null && subdirNames.Count>0)
     foreach(string s in subdirNames)
     {
      if(s.Equals("..") || s.Equals("."))continue;
      if(s!=null && s.Trim()!="")
      {
       q.Enqueue("/"+s);
       DataUnit datau=new DataUnit(s,(long)0,header+"/",DateTime.Now.AddHours(1),ip.ToString(),address);
       Class1.DataQueue.Enqueue(datau);
      }
     }
    while(q.Count>0)
    {
     string parent=q.Dequeue() as string;
     //Console.WriteLine("change to "+parent.Trim());

     try
     {
      ff.chdir(parent.Trim());
     
     }
     catch
     {
      Console.WriteLine(parent.Trim());
      ff.setRemoteHost(ip.ToString());
      ff.login();
      Console.WriteLine("=======Continue========");
      continue;
     }
     fileNames=ff.getFileList("*.*");
     subdirNames=ff.getSubdir("*",ref fileNames);
     if(fileNames!=null && fileNames.Count>0)
      foreach(string s in fileNames)
      {
     
       try
       {
        Console.WriteLine(header+parent+"/"+s);
        long _size=0;
        int h=-1;
        try
        {
         _size=ff.getFileSize(s);
         h=s.IndexOf("/");
        }
        catch
        {
         _size=0;
         Console.WriteLine("size error");
        }
        if(s!=null && s.Trim()!="")
        {
         DataUnit datau=new DataUnit(s,_size,header+parent+"/",DateTime.Now,ip.ToString(),address);
         Class1.DataQueue.Enqueue(datau);
        }
       
       }
       catch(Exception ex)
       {
        Console.WriteLine(ex.Message);
        ff.setRemoteHost(ip.ToString());
        ff.login();
        ff.chdir(parent.Trim());
        Console.WriteLine("=======Continue========");
        continue;
       };
      }
     if(subdirNames!=null && subdirNames.Count>0)
      foreach(string s in subdirNames)
      {
       if(s.Equals("..") || s.Equals(".") || s.StartsWith("\0"))continue;
       if(s!=null && s.Trim()!="")
       {
        q.Enqueue(parent+"/"+s);     
        DataUnit datau=new DataUnit(s,(long)0,header+parent+"/",DateTime.Now.AddHours(1),ip.ToString(),address);
        Class1.DataQueue.Enqueue(datau);
       }
  }
    }
  
    ff.close();
   }
   catch(Exception ex)
   {
    Console.WriteLine(ex.Message);
   };
  }
 }
}

转载于:https://www.cnblogs.com/hzuIT/articles/752723.html


http://lihuaxi.xjx100.cn/news/258058.html

相关文章

Python 搭建 AI 健身评分系统

作者|李秋键来源|AI科技大本营&#xff08;ID:rgznai100&#xff09;引言人工智能作为计算机科学的一个分支,其主要是将人的思维与计算机网络相结合,令整个系统在对某一类事物进行处理时实现人工智能化分析,然后结合内部程序的设定,分析出当前事务处理所具备的各类功能如何实现…

终于把XGBoost总结写出来了!

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale干货 作者&#xff1a;王茂霖&#xff0c;华中科技大学&#xff0c;Datawhale成员内容概括XGBoost模型及调参总结XGBoost原理XGBoost优势总结XGBoost参数详解XGBoost快速使用XGBo…

使用 StopWatch 优雅打印执行耗时

欢迎关注方志朋的博客&#xff0c;回复”666“获面试宝典0x01&#xff1a;背景有时在做开发的时候需要记录每个任务执行时间&#xff0c;或者记录一段代码执行时间&#xff0c;最简单的方法就是打印当前时间与执行完时间的差值&#xff0c;然后这样如果执行大量测试的话就很麻烦…

Linux内核网络栈1.2.13-网卡设备的初始化流程

参考资料 <<linux内核网络栈源代码情景分析>>网卡设备的初始化 本文主要描述一下网卡设备的整个初始化的过程&#xff0c;该过程主要就是根据设备的硬件信息来获取与传输网络数据&#xff0c;注册相关的网卡中断处理函数&#xff0c;协议的初始化等内容。 初始化…

Matlab与线性代数 -- 矩阵的水平连接和垂直连接

本图文详细介绍了Matlab中矩阵的水平连接和垂直连接。

教大模型自己跳过“无用”层,推理速度×3性能不变,谷歌MIT这个新方法火了...

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达萧箫 发自 凹非寺量子位 | 公众号 QbitAI大语言模型用着爽&#xff0c;但推理速度实在太慢了&#xff1f;而且&#xff0c;增加模型体积&#xff0c;推理效果也并不一定就比…

android中的回调

1、引子 android中的回调最经典的就是点击事件设置监听&#xff08;一般通过switch&#xff08;v.getId()&#xff09;&#xff09;这里写个最主要的 btn_rigister.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {// TODO log in} }…

动态模板列更新数据分页的例子

前台&#xff1a;<% Page language"c#" Codebehind"WebForm30.aspx.cs" AutoEventWireup"false" Inherits"csdn.WebForm30" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML>…