Не удается открыть папки с пробелами

У меня есть следующий код для чтения элементов с моего FTP-сервера:

internal List<ftpitem> OpenFolder(string folderName)
{
 FtpWebRequest request = CreateFtpWebRequest("ftp://myserver.com", folderName);
 request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
 List<ftpitem> ftpItems = GetFtpItemsFromRequest(request);
 return ftpItems;
}

private List<ftpitem> GetFtpItemsFromRequest(FtpWebRequest ftpWebRequest)
{
 List<ftpitem> ftpItems = new List<ftpitem>();
 WebResponse webResponse = ftpWebRequest.GetResponse();
 StreamReader reader = new StreamReader(webResponse.GetResponseStream());
 string line = reader.ReadLine();
 while (line != null)
 {
 ftpItems.Add(new FtpItem(line));
 line = reader.ReadLine();
 }
 reader.Close();
 webResponse.Close();
 return ftpItems;
} 

private FtpWebRequest CreateFtpWebRequest(params string[] url)
{
 FtpWebRequest webRequest = (FtpWebRequest)WebRequest.Create(string.Join("/", url));
 webRequest.KeepAlive = false;
 webRequest.UseBinary = true;
 webRequest.Credentials = this.networkCredential;
 return webRequest;
}
</ftpitem></ftpitem></ftpitem></ftpitem></ftpitem>

Пока я пытаюсь открыть папку, такую как root/sub/subsub все работает нормально. Но если имя папки содержит пробел, я получаю сообщение об ошибке

No such file or directory

Я попытался заменить символ пробела на %20, но это не сработает.

Что мне нужно сделать, чтобы открыть папки, содержащие пробелы?

1 ответ

Вы забыли закрытие "/" в конце вашего запроса на URL. Поэтому либо добавьте его в конец запроса:

FtpWebRequest webRequest = (FtpWebRequest)WebRequest.Create(string.Join("/", url)+"/");

или добавить пустую строку в качестве параметра url:

FtpWebRequest request = CreateFtpWebRequest("ftp://myserver.com", folderName,"");

licensed under cc by-sa 3.0 with attribution.