gpt4 book ai didi

c# - ftp 子文件夹下载递归功能不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:41 25 4
gpt4 key购买 nike

我正在尝试从 C# 中的 ftp 下载所有文件,包括子文件夹。

我为子文件夹的递归创建了 DownloadDiretory,为下载文件创建了 DownloadFtpFile。

该代码对于根文件夹文件下载工作正常,但它不下载任何子文件夹文件。

有什么建议吗?

提前致谢。

    public static void DownloadDiretory(string folderPath)
{
try
{

ConnectionsXml objXml = new ConnectionsXml();
AccountFtp account = objXml.GetAccountFtpDetails();

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + account.Website + "/" + folderPath);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential(account.UserId, account.Password);
request.Timeout = 360000;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

//FtpWebResponse response = GetFtpResponse(folderPath);
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream, true);
string filename;
while (!reader.EndOfStream)
{
filename = string.Empty;
filename = reader.ReadLine();

if (filename.Contains("<DIR>"))
{
filename = filename.Substring(filename.IndexOf("<DIR>", 0) + 5, filename.Length - (filename.IndexOf("<DIR>", 0) + 5));
filename = filename.Trim();
DownloadDiretory(folderPath + "/" + filename);
}
else
{
string[] files = filename.Split(' ');
filename = files[files.Length - 1];
DownloadFtpFile(folderPath, filename);
}
}

responseStream.Close();
response.Close();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
}



public static void DownloadFtpFile(string folderName, string fileName)
{
try
{
ConnectionsXml objXml = new ConnectionsXml();
AccountFtp account = objXml.GetAccountFtpDetails();
string path = "ftp://" + account.Website + "/" + folderName + "/" + fileName;
FtpWebRequest request = (FtpWebRequest)WebRequest.CreateDefault(new Uri(path));
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(account.UserId, account.Password);
//request.Timeout = 360000;
request.KeepAlive = false;
request.UsePassive = true;
request.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Stream responseStream = response.GetResponseStream();
if(!Directory.Exists(@"F:\MPR\" + folderName))
{
Directory.CreateDirectory(@"F:\MPR\" + folderName);
}
FileStream fileStream = new FileStream(@"F:\MPR\" + folderName + @"\" + fileName, FileMode.Create);
byte[] bytesbuffer = new byte[32 * 1024];
int byteRead = responseStream.Read(bytesbuffer, 0, 2048);

while (byteRead > 0)
{
fileStream.Write(bytesbuffer, 0, byteRead);
byteRead = responseStream.Read(bytesbuffer, 0, 2048);
}

responseStream.Close();
fileStream.Close();
response.Close();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
}

最佳答案

您的条件 filename.Contains("DIR")) 似乎是错误的。我没有可用的私有(private) ftp 服务器,所以我尝试了 ftp://test.talia.net .文件夹“incoming”返回为

"drwxrwxr-x   2 ftp      ftp          4096 Oct 15 07:32 incoming"

文件返回为 eg

"-rw-r--r--   1 ftp      ftp      10485760 Apr 19  2006 10mb.pak"

因此请尝试使用 filename.StartsWith("d") 进行检查。

此外,这些行:

filename = string.Empty;
filename = reader.ReadLine();

没有任何实际用途。最好在进入循环之前将文件名设置为 string.Empty。

关于c# - ftp 子文件夹下载递归功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26363907/

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