void ReadWebDir(string RemotePath, string username, string password, string LocalPath)
        {
            List<string> DirName = new List<string>();            DirName.Add(RemotePath);            if (DirName.Count > 0)
            {
                for (int i = 0; i <= DirName.Count - 1; i++)
                {
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(DirName[i]);
                    request.Credentials = new NetworkCredential(username, password);
                    request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                    StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
                    while (!sr.EndOfStream)
                    {
                          判断是文件,还是文件夹的代码段
                    }
                    sr.Close();
            }
        }上面是我用于下载ftp服务器上 网站文件 的遍历程序。我现在想开启多个线程,同时下载 其他的更新程序。 于是,创建了两个相同的过程,分别命名为 ReadDBDir,ReadOtherDir. 然后 开启了三个线程 t1,t2,t3,分别指向这三个过程。现在的问题是,每次开启三个线程后,在FtpWebResponse response = (FtpWebResponse)request.GetResponse();这句上就会报找不到文件的错误。但在我测试用的FTP文件夹上,文件是存在的。我觉得,开启三个线程后,由于三个线程都是指向自己的过程,应该不会出现线程间竞争的问题。所以不知道怎么回事了

解决方案 »

  1.   

    您用三个线程,要创建三个FtpWebRequest对象
      

  2.   

    但每个 FtpWebRequest 都在各自的作用域里面
    应该不会互相影响吧
      

  3.   

    一个线程对应一个FtpWebRequest ,应该不会有问题
      

  4.   

    我创建了 ReadWebDir,ReadDBDir,ReadOtherFilesDir 三个读ftp不同文件夹的过程,但三个过程的代码都一样.然后再开启三个对应这三个过程的线程.但就会出现"找不到文件的问题".还有,我发现 my.computer.network.download 这个方法,在多线程下不能用.我写了个test程序,开启了两个线程,两个线程各自对应一个属于自己的,包含my.computer.network.download方法的过程.但在程序运行时,也报找不到文件的错误.....