Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghuraikan Jawapan FTP ListDirectoryDetails Diformat Berubah-ubah dalam C#?

Bagaimanakah Saya Boleh Menghuraikan Jawapan FTP ListDirectoryDetails Diformat Berubah-ubah dalam C#?

Susan Sarandon
Susan Sarandonasal
2024-12-25 18:40:12784semak imbas

How Can I Parse Variably Formatted FTP ListDirectoryDetails Responses in C#?

Menghuraikan FTP WebRequestMethods.Ftp.ListDirectoryDetails Response dengan C#

Pelayan FTP menggunakan format respons yang pelbagai semasa melaksanakan kaedah WebRequestorythods.Detailist. menjadikannya mencabar untuk menghuraikan kandungan yang dikembalikan. Artikel ini menangani kerumitan ini dan menyediakan penyelesaian C# terurus untuk mengendalikan variasi respons yang berbeza dengan lancar.

Cabaran Penghuraian Respons FTP

Respons FTP berbeza-beza bergantung pada perisian pelayan, memimpin kepada format yang tidak konsisten. Sesetengah pelayan FTP menggunakan format DOS/Windows, manakala yang lain menggunakan format *nix, memperkenalkan perbezaan yang ketara.

Penyelesaian C# Terurus

Untuk mengendalikan format respons berubah-ubah ini, penyelesaian C# terurus dibentangkan:

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 serasi dengan format respons DOS/Windows, mengekstrak nama fail/direktori, cap masa terakhir diubah suai dan saiz fail.

Pilihan Alternatif

Walaupun menghuraikan respons LIST adalah pendekatan yang sah, adalah disyorkan untuk menggunakan klien FTP yang menyokong arahan MLSD, menyediakan format berstruktur dan standard untuk penyenaraian direktori. Pustaka pihak ketiga, seperti WinSCP, melaksanakan sokongan MLSD dan menawarkan ciri tambahan untuk pengurusan FTP.

Kesimpulannya, penyelesaian C# yang disediakan secara berkesan mengendalikan FTP WebRequestMethods.Ftp.ListDirectoryDetails penghuraian respons, mengambil kira format respons yang pelbagai. Walau bagaimanapun, mempertimbangkan pengehadan kaedah LIST, meneroka pilihan alternatif yang memanfaatkan arahan MLSD disyorkan untuk pengurusan FTP yang optimum.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Jawapan FTP ListDirectoryDetails Diformat Berubah-ubah dalam C#?. 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