0

FTP サーバーから (C# を使用して) ファイルを圧縮し、zip ファイルをローカル pc のどこかに保存しようとしています。ファイルを圧縮できるコードを管理しました。しかし、ftp をループしてすべてのファイルを圧縮する方法がわかりません (最大で 100 個のファイルを圧縮する必要があり、Zipfile は 100 メガバイトを超えてはなりません。

これは、ftp および Zip 1 ファイルに接続するために使用したコードです。複数のファイルを圧縮するにはどうすればよいですか?

 public void ProcessZipRequest(string strQueueID, string strBatchID, string strFtpPath)
    {


        int intReportCnt = 0;

        string strZipFileName = "Order-" + strBatchID + "-" + strQueueID + "-" + DateTime.Now.ToString("MM-dd-yyyy-HH-mm") + ".zip";
        strZipFileName = SafeFileName(strZipFileName);

        //MemoryStream ms = new MemoryStream();
        FileStream ms = new FileStream(@"c:\ZipFiles\nitest.zip", FileMode.Create);
        ZipOutputStream oZipStream = new ZipOutputStream(ms); // create zip stream

        oZipStream.SetLevel(9); // maximum compression

        intReportCnt += 1;

        string strRptFilename;

        if (strQueueID != null)
        {

            MemoryStream outputStream = new MemoryStream();

            // Get file path

         string ftpFilePath = @"ftp://12.30.228.20/AOTest/Images/Report/11/595/45694/62_s.jpg";



            // That is where I get 1 file from ftp (How loop here?)
            strRptFilename = ftpFilePath.Substring(ftpFilePath.LastIndexOf("/") + 1);

            FtpWebRequest reqFTP = (FtpWebRequest)System.Net.WebRequest.Create(ftpFilePath);
            reqFTP.UseBinary = true;
            reqFTP.KeepAlive = false;
            reqFTP.Credentials = new NetworkCredential("username", "password");
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.Proxy = null;

            FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
            Stream ftpStream = response.GetResponseStream();

            long cl = response.ContentLength;
            int bufferSize = 2048;
            int readCount;
            byte[] buffer = new byte[bufferSize];

            readCount = ftpStream.Read(buffer, 0, bufferSize);
            while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }

            ftpStream.Close();

            outputStream.Position = 0;

            //Where I zip the files 
            ZipFile(ref outputStream, strRptFilename, ref oZipStream);

            ftpStream.Close();
            outputStream.Close();


            if (response != null)
            {
                response.Close();
            }



        }

そして、それがファイルを圧縮する ZipFile メソッドです。

 public void ZipFile(ref MemoryStream msFile, string strFilename, ref ZipOutputStream oZipStream)
    {
        ZipEntry oZipEntry = new ZipEntry(strFilename);
        oZipEntry.DateTime = DateTime.Now;
        oZipEntry.Size = msFile.Length;

        oZipStream.PutNextEntry(oZipEntry);

        StreamUtils.Copy(msFile, oZipStream, new byte[4096]);

        oZipStream.CloseEntry();
    }
4

1 に答える 1

1

リストで foreach ループを使用することを検討しましたか。

次のようなものを試してください

Filenamelist = new List <string>();

次に、foreach ループを実行して、リストにファイルを入力します。何かのようなもの

 foreach (//listobject in //listname)
{
  Filenamelist.Add(file.Name).
}

そこから foreach ループを使用して同じタイプのものを実行し、関数を圧縮します。

ちょっとした考え。乾杯!

于 2013-07-23T19:04:55.983 に答える