Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghuraikan FTP ListDirectoryDetails Responses dalam C# untuk Mengekstrak Maklumat Fail dengan Boleh Dipercayai?
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:
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!