1

私の全体的な目標は、ftp から zip ファイルを取得し、その場で開き、Excel ファイルの特定のフィールドの内容を読み取ることです (zip には 1 つのファイルしかありません)。

これまでのところ、ftpwebrequest を使用して ftp に接続することに成功しており、ファイルをローカル フォルダーにダウンロードできます (希望するワークフローではありませんが、「ベイビー ステップ」アプローチを取っています)。

Asp.Net 4.5 で ZipFile というクラスが導入され、zip を開いて読み取る方法があるようですが、ftp パスを有効なパスとして受け入れるようには見えません。

これが私がダウンロードするために持っているものです。

var file = f.Element("FILE_PATH").Value;
                string ftpHost = "ftp.com";

                var URI = @"ftp://" + ftpHost + "/download/" + file;
                var UserName = @"ftp@mysite.com";

                FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(URI);
                ftp.UsePassive = true;
                ftp.Credentials = new NetworkCredential(UserName, "Password");
                ftp.UseBinary = true;
                ftp.Method = WebRequestMethods.Ftp.DownloadFile;

                FtpWebResponse ftpResponse = (FtpWebResponse)ftp.GetResponse();
                string theFile = ftpResponse.ResponseUri.ToString();

                Stream responseStream = ftpResponse.GetResponseStream();
                FileStream writer = new FileStream(@"C:\websites\" + file, FileMode.Create);

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

                readCount = responseStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    writer.Write(buffer, 0, readCount);
                    readCount = responseStream.Read(buffer, 0, bufferSize);
                }
                responseStream.Close();
                ftpResponse.Close();
                writer.Close();

zipを開いて読み取るために、次を実装しようとしました。このブロックは、より適切な場所がわからないため、文字列「theFile」を作成する行の後に配置しました。これは、パスが無効であるというエラーを返します。

.... FtpWebResponse ftpResponse = (FtpWebResponse)ftp.GetResponse();
                    string theFile = ftpResponse.ResponseUri.ToString();
using (ZipArchive archive = ZipFile.OpenRead(theFile))
                    {
                        foreach (ZipArchiveEntry zfile in archive.Entries)
                        {
                            var FileName = zfile.Name;

                        }
                    }

このファイルを ftp から開いて読み取るにはどうすればよいですか?

4

0 に答える 0