C# による FTP WebRequestMethods.Ftp.ListDirectoryDetails 応答の解析
FTP サーバーは、WebRequestMethods.Ftp.ListDirectoryDetails メソッドの実行時にさまざまな応答形式を利用します。そのため、返されたコンテンツを解析するのが困難になります。この記事では、これらの複雑さに対処し、さまざまな応答のバリエーションをシームレスに処理するためのマネージド C# ソリューションを提供します。
FTP 応答解析の課題
FTP 応答はサーバー ソフトウェアによって異なります。一貫性のないフォーマットになります。 FTP サーバーには、DOS/Windows 形式を使用するものと、*nix 形式を使用するものがあるため、微妙な違いがあります。
マネージド C# ソリューション
これらの可変応答形式を処理するには、マネージド C# ソリューションが表示されます:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/"); request.Credentials = new NetworkCredential("user", "password"); request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream()); string pattern = @"^(\d+-\d+-\d+\s+\d+:\d+(?:AM|PM))\s+(<DIR>|\d+)\s+(.+)$"; Regex regex = new Regex(pattern); IFormatProvider culture = CultureInfo.GetCultureInfo("en-us"); while (!reader.EndOfStream) { string line = reader.ReadLine(); Match match = regex.Match(line); string s = match.Groups[1].Value; DateTime modified = DateTime.ParseExact(s, "MM-dd-yy hh:mmtt", culture, DateTimeStyles.None); s = match.Groups[2].Value; long size = (s != "<DIR>") ? long.Parse(s) : 0; string name = match.Groups[3].Value; Console.WriteLine( "{0,-16} size = {1,9} modified = {2}", name, size, modified.ToString("yyyy-MM-dd HH:mm")); }
このコードは DOS/Windows 応答形式と互換性があり、以下を抽出します。ファイル/ディレクトリ名、最終変更タイムスタンプ、およびファイル サイズ。
代替オプション
LIST 応答を解析することは有効な方法ですが、次のような FTP クライアントを利用することをお勧めします。 MLSD コマンドをサポートし、ディレクトリ リストの構造化および標準化された形式を提供します。 WinSCP などのサードパーティ ライブラリは、MLSD サポートを実装し、FTP 管理用の追加機能を提供します。
結論として、提供される C# ソリューションは、FTP WebRequestMethods.Ftp.ListDirectoryDetails 応答解析を効果的に処理し、多様な応答形式を考慮します。ただし、LIST メソッドの制限を考慮し、最適な FTP 管理を行うには、MLSD コマンドを活用する代替オプションを検討することをお勧めします。
以上がC# で可変形式の FTP ListDirectoryDetails 応答を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。