gpt4 book ai didi

C# 使用 ftpRequest 获取完整的文件列表很慢

转载 作者:太空狗 更新时间:2023-10-30 00:12:49 24 4
gpt4 key购买 nike

我想获取 FTP 服务器上每个文件的文件名、文件大小和最后修改时间,然后用它填充一个 listView。

在我切换 FTP 主机之前它工作得非常好,现在它真的很慢,尽管新主机在真正的 FTP 客户端中一样快。

有什么明显的原因吗?

另外,真的有必要每次都发送登录凭证吗?

我使用第一种方法获取字符串数组,然后遍历它并在每个项目上使用第二种方法获取文件大小:

    public static string[] GetFileList()
{
string[] downloadFiles;
StringBuilder result = new StringBuilder();
FtpWebRequest request;
try
{
request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://mysite.se/"));
request.UseBinary = true;
request.Credentials = new NetworkCredential(settings.Username, settings.Password);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.UseBinary = true;

WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());

string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
// to remove the trailing '\n'
result.Remove(result.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
return result.ToString().Split('\n');
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
downloadFiles = null;
return downloadFiles;
}
}

public static int GetFileSize(string file)
{
//MessageBox.Show("getting filesize...");

StringBuilder result = new StringBuilder();
FtpWebRequest request;
try
{
request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://mysite.se/" + file));
request.UseBinary = true;
request.Credentials = new NetworkCredential(settings.Username, settings.Password);
request.Method = WebRequestMethods.Ftp.GetFileSize;

int dataLength = (int)request.GetResponse().ContentLength;

return dataLength;
}
catch (Exception ex)
{
//System.Windows.Forms.MessageBox.Show(ex.Message);
return 1337;
}
}

最佳答案

问题是每次 GetFileSize 调用都必须重新连接到服务器并发出文件大小请求。如果您可以将事情设置为使用单个持久连接,那么您将节省连接时间,但仍将花费大量时间为每个文件发送请求并等待响应。

(编辑:这可能已经是这种情况。MSDN 说:Multiple FtpWebRequests reuse existing connections, if possible.)

如果您使用 ListDirectoryDe​​tails 而不是 ListDirectory,那么服务器可能会发送更多信息(文件大小、权限等)以及每个文件名。这不会比只执行 ListDirectory 花费更多时间,而且您可以从每一行中提取名称和大小并存储这些大小供以后使用。

但是,不同的服务器可能会以不同的格式发送信息,有些可能根本不发送大小信息,因此如果您需要您的程序可靠地使用任何 FTP 服务器,这可能无济于事。

关于C# 使用 ftpRequest 获取完整的文件列表很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2302817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com