1

次のコードを使用して出力を取得しFtpWebRequest、行を 1 つずつ解析しています。

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 関数は 1 つの空白要素の配列を作成しているため、ifステートメントを使用してそれを除外する必要がありました。

Trim()完全にトリミングしないのはなぜですか?

4

1 に答える 1

1

ReadToEnd()呼び出しの出力が空の文字列であると仮定すると(ただし、空白ではないため、空白ではありません)、Trim()メソッドは完全に機能します。つまり、何もないという事実にもかかわらず、すべての空白を削除します。

このString.Split()メソッドは、要素が空の文字列であっても、少なくとも 1 つの要素の配列を常に返します。文字列にはテキストが含まれておらず、空であるため、1 つの空の文字列の配列を取得しています。

于 2012-11-17T07:22:56.140 に答える