Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghuraikan FTP ListDirectoryDetails Responses dalam C# untuk Mengekstrak Maklumat Fail dengan Boleh Dipercayai?

Bagaimanakah Saya Boleh Menghuraikan FTP ListDirectoryDetails Responses dalam C# untuk Mengekstrak Maklumat Fail dengan Boleh Dipercayai?

DDD
DDDasal
2024-12-27 21:08:13721semak imbas

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

Menghuraikan FTP ListDirectoryDetails Responses dengan C#

Apabila memantau lokasi FTP untuk kemas kini, adalah penting untuk mengekstrak maklumat daripada respons yang dikembalikan oleh WebRequestMethods. Kaedah Ftp.ListDirectoryDetails. Walau bagaimanapun, perisian pelayan FTP yang berbeza membentangkan format respons yang berbeza-beza, menimbulkan cabaran penghuraian.

Pernyataan Masalah

Memandangkan dua format respons biasa (DOS/Windows dan *nix) , tugasnya adalah untuk mencari kelas C# terurus sepenuhnya yang mengendalikan perbezaan ini dengan lancar dan mengekstrak perkara berikut butiran:

  • Nama fail/direktori
  • Tamp masa yang terakhir dikemas kini atau dibuat
  • Saiz fail/direktori

Jawapan

DOS/Windows Penyenaraian

Untuk format respons pertama (DOS/Windows), kod C# berikut menghuraikan respons dengan berkesan:

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"));
}

Kod ini akan menghasilkan output yang diingini:

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

Penyenaraian (*nix) lain

Untuk *nix lain penyenaraian, menggunakan arahan MLSD adalah disyorkan. MLSD mengembalikan format penyenaraian yang boleh dibaca mesin, menghapuskan keperluan untuk penghuraian kompleks.

Perpustakaan Alternatif

Menggunakan kelas FtpWebRequest mungkin tidak boleh dipercayai untuk tujuan ini. Pertimbangkan untuk menggunakan perpustakaan pihak ketiga seperti pemasangan WinSCP .NET, yang menyokong MLSD dan boleh kembali kepada arahan LIST untuk mengendalikan pelbagai format respons.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan FTP ListDirectoryDetails Responses dalam C# untuk Mengekstrak Maklumat Fail dengan Boleh Dipercayai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn