C# を使用した変数形式のディレクトリ リストの FTP 応答の解析
問題ステートメント:
FTP の場所を監視するサービスを開発する場合、FTP から受信した応答を解析する必要があります。 WebRequestMethods.Ftp.ListDirectoryDetails メソッドを使用した FtpWebRequest。この問題は、FTP サーバー ソフトウェア間で応答形式が異なるために発生します。たとえば、あるサーバーは Windows スタイルの DOS 形式で応答を返し、別のサーバーは Linux スタイルの UNIX 形式に準拠する可能性があります。
カスタム C# 解析ソリューション:
FtpWebRequest クラスはこれらの形式のバリエーションをネイティブに処理しませんが、カスタム C# ソリューションを作成できます。 DOS スタイルの形式の場合、次のコードを利用できます:
string pattern = "^(\d+-\d+-\d+\s+\d+:\d+(\w{2}))\s+(<DIR>|\d+)\s+(.*)$"; Regex regex = new Regex(pattern); 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} {1,9} {2}", name, size, modified); }
MLSD コマンドを使用した最新のソリューション:
より良いアプローチは、MLSD コマンドを活用することです。 、最新の FTP サーバーでサポートされています。このコマンドは、ディレクトリ リストの標準化された機械可読形式を返します。 WinSCP .NET などの特定のサードパーティ ライブラリは、MLSD コマンドをサポートし、一貫した方法で解析結果を提供します。
RemoteFileInfo[] files = session.EnumerateRemoteFiles(path, null); foreach (RemoteFileInfo file in files) { Console.WriteLine("{0,-16} {1,9} {2}", file.Name, file.Length, file.LastWriteTime); }
結論:
FTP の解析ディレクトリリストの応答では、さまざまな形式を慎重に処理する必要があります。カスタム ソリューションも可能ですが、最新の MLSD コマンドをサポートするライブラリを利用する方がより信頼性が高くなります。このアプローチにより、一貫した解析が行われ、FTP 応答から関連するファイルとディレクトリのメタデータを抽出するタスクが簡素化されます。
以上がC# で可変形式の FTP ディレクトリ リストを確実に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。