如何.netcore 从ftp下载多个文件到本地

请教一下,如何从ftp下载多个文件到本地,并将多个文件打包,.net core web开发

可以使用System.Net.FtpWebRequest类来从FTP服务器上下载文件,可以使用System.IO.Compression.ZipFile类来创建压缩文件,打包多个文件。下面演示一下:

using System;
using System.IO;
using System.Net;

namespace DownloadAndZipFilesFromFTP
{
    class Program
    {
        static void Main(string[] args)
        {
            // FTP server credentials
            string ftpServer = "ftp://example.com/";
            string userName = "user";
            string password = "password";

            // Local directory to save files
            string localDirectory = @"C:\DownloadedFiles";

            // Files to download and zip
            string[] filesToDownload = { "file1.txt", "file2.txt", "file3.txt" };
            string zipFileName = "DownloadedFiles.zip";

            // Download files
            foreach (string fileName in filesToDownload)
            {
                DownloadFileFromFTP(ftpServer, userName, password, fileName, localDirectory);
            }

            // Zip files
            string[] filesToZip = Directory.GetFiles(localDirectory);
            string zipFilePath = Path.Combine(localDirectory, zipFileName);
            ZipFiles(filesToZip, zipFilePath);

            Console.WriteLine("Files downloaded and zipped successfully.");
        }

        // Download a file from FTP server
        static void DownloadFileFromFTP(string ftpServer, string userName, string password, string fileName, string localDirectory)
        {
            string ftpFilePath = ftpServer + fileName;
            string localFilePath = Path.Combine(localDirectory, fileName);

            // Create FTP request
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpFilePath);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential(userName, password);

            // Download file
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            using (Stream responseStream = response.GetResponseStream())
            using (FileStream fileStream = new FileStream(localFilePath, FileMode.Create))
            {
                responseStream.CopyTo(fileStream);
            }

            Console.WriteLine($"File {fileName} downloaded successfully.");
        }

        // Zip multiple files into one zip file
        static void ZipFiles(string[] filesToZip, string zipFilePath)
        {
            // Create zip file
            ZipFile.CreateFromDirectory(filesToZip[0], zipFilePath);

            // Add files to zip file
            using (ZipArchive zip = ZipFile.Open(zipFilePath, ZipArchiveMode.Update))
            {
                for (int i = 1; i < filesToZip.Length; i++)
                {
                    zip.CreateEntryFromFile(filesToZip[i], Path.GetFileName(filesToZip[i]));
                }
            }

            Console.WriteLine($"Files zipped successfully to {zipFilePath}.");
        }
    }
}