我有以下代码从我的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;
}
Run Code Online (Sandbox Code Playgroud)
只要我尝试打开一个像root/sub/subsub一切正常的文件夹.但是如果foldername包含空格,我会收到错误消息
No such file or directory
Run Code Online (Sandbox Code Playgroud)
我试图用%20替换空格字符,但这不起作用.
打开包含空格的文件夹我该怎么办?
您忘记了在网址请求结束时关闭"/".所以要么将它附加到请求的末尾:
FtpWebRequest webRequest = (FtpWebRequest)WebRequest.Create(string.Join("/", url)+"/");
Run Code Online (Sandbox Code Playgroud)
或者添加一个空字符串作为url参数:
FtpWebRequest request = CreateFtpWebRequest("ftp://myserver.com", folderName,"");
Run Code Online (Sandbox Code Playgroud)