0
我由可掃描ftp服務器的方法。它在if ... else語句中有兩個部分。在運行,如果第一部分時,目錄列表等於0,和文件夾從文件分開(並把它們放到該列表)。然後(因爲列表不再是空的)else語句應該運行。它有一個foreach循環,它檢查列表中的所有元素,並將它們連接到ftp地址並掃描該文件夾。這是問題。看起來它變成了一個無限循環。我只想檢查服務器上的文件夾並打破循環,但看起來好像找不到有用的解決方案。我該如何解決以下方法?
下面的代碼:
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.ToArray())
{
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(ArgumentException)
{
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
ListFilesOnServer();
}
它在哪裏卡住?你是否使用斷點檢查它? – Shaharyar
else語句不會在if後運行,只要有代碼follow.an if語句如果您希望發生這種情況(否則) – Sayse
由於您在不設置目錄的情況下遞歸調用函數,因此您會陷入循環 – Sayse