如何在我的ftp服务器上创建递归子目录,直到完成所有目录和带有大写字符的目录

本文关键字:字符 ftp 服务器 我的 创建 子目录 递归 | 更新日期: 2023-09-27 18:34:24

这是我用来在ftp服务器上创建目录的方法。

public void createDirectory(string newDirectory)
        {
            try
            {
                string FtpHost = f.Host + "/" + newDirectory;
                if (!FtpHost.ToLower().StartsWith("ftp://"))
                    FtpHost = "ftp://" + FtpHost;
                ftpRequest = (FtpWebRequest)WebRequest.Create(FtpHost);
                ftpRequest.Credentials = new NetworkCredential(f.Username, f.Password);
                ftpRequest.UseBinary = true;
                ftpRequest.UsePassive = true;
                ftpRequest.KeepAlive = true;
                ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
                ftpResponse1 = (FtpWebResponse)ftpRequest.GetResponse();
                ftpResponse1.Close();
                ftpRequest = null;
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            return;
        }

例如,问题以及为什么我需要制作递归循环

如果在文本框中我键入这样的目录:c/1/2/3/4/5,并且在我的 ftp 服务器上,c 1/2/3/4 下的子/子目录不存在,尚未创建,否则它将引发异常。但是,如果我手动输入文本框一次c/1,它将很好地创建目录。然后我键入 c/1/2 将创建它。然后我键入 c/1/2/3 将创建正常。然后我键入 c/1/2/3/4 将创建正常。然后,如果键入或粘贴到textBox c/1/2/3/4/5,它将创建它,因为所有目录1/2/3/4都已经存在,因此它将创建目录5而不是问题。

出于某种原因,如果其中一些子/子目录尚不存在,则不理解或不知道创建子目录。它不会创建 c/1/2/3/4/5/6/7/8,如果已经创建了 1/2/3/4/5/6/7,它不会创建目录 8。

这就是为什么我需要做一些循环递归,这也将检查我的服务器上是否存在目录,然后创建它们,如果不是:c/1/2/3/4/5/6/7/8

循环应该检查 c/1 是否存在,如果不创建,则创建 c/1/2,然后创建 c/1/2/3,直到 c/1/2/3/4/5/6/7/8,如果目录 c/1/2/3/4/5/6 已经存在,但我输入了 c/1/2/3/4/5/6/7/8,循环应该发现直到 6 目录已经存在,所以只创建/7/8在所有情况下都有异常的

异常是相同的,但我确信这是我需要以某种方式制作递归循环的问题,该循环还将检查子/子目录是否已经存在。

网络异常

远程服务器返回错误:(550( 文件不可用(例如,找不到文件,无法访问(

System.Net.WebException was caught
  HResult=-2146233079
  Message=The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
  Source=System
  StackTrace:
       at System.Net.FtpWebRequest.CheckError()
       at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
       at System.IO.Stream.Close()
       at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
       at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
       at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
       at System.Net.FtpWebRequest.GetResponse()
       at FTP_ProgressBar.FtpProgress.createDirectory(String newDirectory) in c:'ftp_progressbar'FTP_ProgressBar'FtpProgress.cs:line 295
  InnerException: 

第 295 行是:

ftpResponse1 = (FtpWebResponse)ftpRequest.GetResponse();

如何在我的ftp服务器上创建递归子目录,直到完成所有目录和带有大写字符的目录

您可以尝试使用 / 拆分目录名称,然后单独创建分层目录。

string[] folderArray = directory.Split('/');
string folderName = "";
for (int i = 0; i < folderArray.Length; i++)
{
    if(!string.IsNullOrEmpty(folderArray[i]))
    {
        folderName = string.IsNullOrEmpty(folderName) ? folderArray[i] : folderName + "/" + folderArray[i];
        WebRequest request = WebRequest.Create("ftp://" + ftpAddress + "/" + folderName);
        request.Method = WebRequestMethods.Ftp.MakeDirectory;
        request.Credentials = new NetworkCredential(username, password);
        var response = request.GetResponse();
        var test = response.ToString();
    }
}