我使用以下代码获取FtpWebRequest
的输出,然后逐个解析这些行。
FTPEntity entity = new FTPEntity(entityName);
entities.Add(entity);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(textBoxFTPSite.Text + entityName);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential(textBoxFTPUserName.Text, textBoxFTPPassword.Text);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string[] outputlines = reader.ReadToEnd().Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
foreach (string info in outputlines) {
if (info == "") {
worker.ReportProgress(1);
continue;
}
var tokens = info.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
}
由于该FTP目录中没有任何内容,ReadToEnd()
的输出为空。但仍然是Split函数正在创建一个空白元素的数组,我不得不使用if
语句来过滤掉那个。
为什么Trim()
没有完全修剪?
答案 0 :(得分:1)
假设ReadToEnd()
调用的输出是空字符串(但不是空白,因为它不同),那么Trim()
方法正在完美地完成其工作,即删除所有空格,尽管事实上,没有任何。
String.Split()
方法将始终返回至少一个元素的数组,即使该元素是空字符串也是如此。由于您的字符串不包含任何文本且为空,因此您将获得一个空字符串数组。