所以,我有一个“扫描”一个FTP服务器的方法。首先它扫描根,并确定哪些内容是文件,哪个是文件夹,并将它们添加到两个不同的集合(文件夹和字符串的字符串列表,文件的int类型字典)中。毕竟它自称。该方法运行在检查列表计数的if ... else语句中。如果它为零,该方法将扫描根文件夹。否则它应该将列表的第一个元素连接到ftp地址并检查该文件夹。这是问题。每次我尝试执行该方法时,在第二次运行(在扫描完根后)它会抛出一个InvalidOperation异常,因为“该集合已被修改;枚举操作可能无法执行”。我怎样才能避免这种情况?如何避免以下方法中的InvalidOperationException?
这里顺便代码:
internal void ListFilesOnServer()
{
ArrayList files = new ArrayList();
if (directories.Count == 0)
{
try
{
FtpWebRequest ftpwrq = (FtpWebRequest)WebRequest.Create(server);
ftpwrq.Credentials = new NetworkCredential(user, passw);
ftpwrq.Method = WebRequestMethods.Ftp.ListDirectory;
ftpwrq.KeepAlive = false;
FtpWebResponse fresponse = (FtpWebResponse)ftpwrq.GetResponse();
StreamReader sr = new StreamReader(fresponse.GetResponseStream());
string temp = "";
while ((temp = sr.ReadLine()) != null)
{
files.Add(temp);
}
temp = String.Empty;
sr.Close();
fresponse.Close();
DirOrFile(files);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
else
{
foreach (string file in directories)
{
try
{
FtpWebRequest ftpwrq = (FtpWebRequest)WebRequest.Create(server+"/"+file);
ftpwrq.Credentials = new NetworkCredential(user, passw);
ftpwrq.Method = WebRequestMethods.Ftp.ListDirectory;
ftpwrq.KeepAlive = false;
FtpWebResponse fresponse = (FtpWebResponse)ftpwrq.GetResponse();
StreamReader sr = new StreamReader(fresponse.GetResponseStream());
string temp = "";
while ((temp = sr.ReadLine()) != null)
{
files.Add(temp);
}
temp = String.Empty;
sr.Close();
fresponse.Close();
DirOrFile(files);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
level = 1;
ListFilesOnServer();
}
'目录'是一个类的成员,我推定和修改'DirOrFile'的执行内? – rene