我需要列出所有文件和文件夹(所有包含子文件夹的文件)。
所以我使用控制台应用程序进行测试。
这是我的源代码。
仅用于调试的参数计数
public static List<string> GetFile(string baseUrl, string username, string pwd, int count = 0)
{
List<string> result = new List<string>();
FtpWebRequest ftp = null;
List<string> fileNames = new List<string>();
List<string> fileDetails = new List<string>();
WebResponse response = null;
try
{
ftp = CreateRequest(baseUrl, username, pwd, WebRequestMethods.Ftp.ListDirectory);
response = ftp.GetResponse();
using (StreamReader sr1 = new StreamReader(response.GetResponseStream(), Encoding.Default))
{
string str = sr1.ReadLine();
while (!string.IsNullOrWhiteSpace(str))
{
fileNames.Add(str);
str = sr1.ReadLine();
}
response.Close();
}
ftp = CreateRequest(baseUrl, username, pwd, WebRequestMethods.Ftp.ListDirectoryDetails);
using (response = ftp.GetResponse())
using (StreamReader sr1 = new StreamReader(response.GetResponseStream(), Encoding.Default))
{
...
}
if (fileDetails.Count > 0 && fileNames.Count > 0)
{
foreach (var c in fileNames)
{
if (!string.IsNullOrWhiteSpace(fileDetails.FirstOrDefault(d => d.Contains(c) && d.StartsWith("d"))))
{
//Directory
result.Add($"{baseUrl}/{c}");
result.AddRange(GetFile($"{baseUrl}/{c}", username, pwd, count += 1));
}
else
{
result.Add($"{baseUrl}/{c}");
}
}
}
}
catch (Exception ex)
{
result.Add(count.ToString());
result.Add(ex.Message);
}
finally
{
if (response != null)
{
response.Close();
response.Dispose();
}
}
return result;
}
有时候我会得到这样的异常:
System.Net.WebException:'基础连接已关闭:服务器违反了协议。'
如何解决此问题? 此异常不会同时抛出
那么也许是服务器端出现的这个问题?