1

我正在使用以下代码来获取输出,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()不完全修剪?

4

1 回答 1

1

假设您的ReadToEnd()调用的输出是一个空字符串(但不是空白,因为这是不同的),那么该Trim()方法正在完美地完成它的工作,即删除所有空白,尽管事实上没有任何空白。

String.Split()方法将始终返回一个至少包含一个元素的数组,即使该元素是一个空字符串。由于您的字符串不包含文本并且为空,因此您将获得一个包含一个空字符串的数组。

于 2012-11-17T07:22:56.140 回答