그래서 FTP 서버를 "검사하는"방법이 있습니다. 처음에는 루트를 검색하고 어떤 내용이 파일이고 어떤 내용이 폴더인지 확인한 다음 두 개의 다른 모음 (폴더 및 문자열의 문자열 목록, 파일의 int 유형 사전)을 추가합니다. 그리고 결국 그것 자체를 호출합니다. 이 메서드는 목록의 수를 확인하는 if ... else 문에서 실행됩니다. 값이 0이면 메서드는 루트 폴더를 검사합니다. 그렇지 않으면 목록의 첫 번째 요소를 ftp 주소에 연결하고 해당 폴더를 확인해야합니다. 여기에 문제가 있습니다. 메서드를 실행하려고 할 때마다 두 번째 실행 (루트 검사가 끝난 후)에 "컬렉션이 수정되었으므로 열거 연산이 실행되지 않을 수 있습니다"때문에 InvalidOperation Exception이 발생합니다. 어떻게 이것을 피할 수 있습니까?다음 메소드에서 InvalidOperationException을 피할 수있는 방법은 무엇입니까?
여기 그런데 코드입니다 : 기본 컬렉션 구조적으로 수정 된 후 C#에서
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();
}
'directories' 내가 추정과'DirOrFile'의 구현 내부에 수정 된 클래스 멤버 : 당신은 단지리스트의 말미에 추가하는 경우에만 올바른 것인가? – rene