ホームページ >バックエンド開発 >C++ >C# で FTP ListDirectoryDe​​tails 応答を解析してファイル情報を確実に抽出するにはどうすればよいですか?

C# で FTP ListDirectoryDe​​tails 応答を解析してファイル情報を確実に抽出するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-27 21:08:13717ブラウズ

How Can I Parse FTP ListDirectoryDetails Responses in C# to Extract File Information Reliably?

C# を使用した FTP ListDirectoryDe​​tails 応答の解析

更新のために FTP の場所を監視する場合、WebRequestMethods によって返された応答から情報を抽出することが不可欠です。 Ftp.ListDirectoryDe​​tails メソッド。ただし、FTP サーバー ソフトウェアが異なると、さまざまな応答形式が表示され、解析の課題が生じます。

問題ステートメント

2 つの一般的な応答形式 (DOS/Windows および *nix) を考えると、 、タスクは、これらの違いをシームレスに処理し、次のものを抽出するフルマネージド C# クラスを見つけることです。詳細:

  • ファイル/ディレクトリ名
  • 最終更新または作成タイムスタンプ
  • ファイル/ディレクトリ サイズ

回答

DOS/Windowsリスト

最初の応答形式 (DOS/Windows) の場合、次の 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"));
}

このコードは目的の出力を生成します:

Version2         size =         0  modified = 2011-08-10 12:02
image34.gif      size = 144700153  modified = 2009-06-25 14:41
updates.txt      size = 144700153  modified = 2009-06-25 14:51
digger.tif       size = 144700214  modified = 2010-11-04 14:45

その他 (*nix)リスト

その他の *nix リストの場合は、MLSD コマンドの使用をお勧めします。 MLSD は機械可読なリスト形式を返すため、複雑な解析の必要がなくなります。

代替ライブラリ

この目的での FtpWebRequest クラスの使用は信頼できない可能性があります。 WinSCP .NET アセンブリなどのサードパーティ ライブラリの使用を検討してください。このライブラリは、MLSD をサポートし、LIST コマンドにフォールバックしてさまざまな応答形式を処理できます。

以上がC# で FTP ListDirectoryDe​​tails 応答を解析してファイル情報を確実に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。