2011-06-23 19 views
3

FTPロケーションからzipファイルをコピーする際のいくつかの問題を見つける。私はStreamReaderまたはStreamWriterの使用に何か問題があると思います。ここで FTPからZIPファイルをダウンロードし、ウェブサイト内のフォルダにコピーする

コードです:

//read through directory details response 
string line = reader.ReadLine(); 
while (line != null) 
{ 
    if (line.EndsWith("zip")) //"d" = dir don't need "." or ".." dirs 
    { 
     FtpWebRequest downloadRequest = (FtpWebRequest)FtpWebRequest.Create("ftp://" + ftpHost + line); //new Uri("ftp://" + ftpServerIP + DestinationFolder + fileInf.Name)); 
     downloadRequest.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FilesUser"], ConfigurationManager.AppSettings["FilesPass"]); 
     downloadRequest.KeepAlive = false; 
     downloadRequest.UseBinary = true; 
     downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile; 

     string folderToWrite = HttpContext.Current.Server.MapPath("~/Routing/RoutingFiles/"); 
     string folderToSave = HttpContext.Current.Server.MapPath("~/Routing/"); 

     StreamReader downloadRequestReader = new StreamReader(downloadRequest.GetResponse().GetResponseStream()); 
     DirectoryInfo downloadDirectory = new DirectoryInfo(folderToWrite); 

     FileInfo file = new FileInfo(Path.Combine(downloadDirectory.FullName, line)); 
     if (!file.Exists) 
     { 
      StreamWriter writer = new StreamWriter(Path.Combine(folderToWrite, line), false); 
      writer.Write(downloadRequestReader.ReadToEnd()); 

      using (var downloadResponseStream = response.GetResponseStream()) 
      { 
      } 
     } 
    } 
} 

それはそのセクションの底になる頃には、ファイルがコピーされますが、空であるので、私は正しくストリームを読んでいるとは思わないされていますzipファイル誰にでもアイデアはありますか?私は、FileStreamがZipファイルをダウンロードするのが良いという話を見たことがありますが、どちらもうまくいきませんでした。

ありがとうございました。

答えて

10

以下は、ftpからファイルをダウンロードする例です。

try 
{ 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpAddr + "test.zip"); 
    request.Credentials = new NetworkCredential(userName, password); 
    request.UseBinary = true; // Use binary to ensure correct dlv! 
    request.Method = WebRequestMethods.Ftp.DownloadFile; 

    FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
    Stream responseStream = response.GetResponseStream(); 
    FileStream writer = new FileStream("test.zip", 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(); 
    response.Close(); 
    writer.Close(); 

} 
catch (Exception e) 
{ 
    Console.WriteLine(e.ToString()); 
} 

編集私は、以前のコードのエラーのためにごめんなさい。

私は次のリソース有用であることが判明私の以前のコード訂正:example

+0

こんにちはTeletha - 進歩を遂げ、今というエラーをもたらしている:私は試してみて、行くとき「のZipEntry :: ReadDirEntry()悪い署名を」内容をループするためにZipファイルにコピーします。ダウンロードしたzipファイルをエクスプローラで試してみると、「圧縮されたフォルダ...は無効です」というエラーが表示されます。 Zipファイルには別のダウンロード方法は必要ありませんか? –

+0

あなたは正しいです。通常のファイルで動作し、zipファイルでも動作すると想定していました。ごめんなさい。今すぐソリューションを見てください。 – Teletha

+0

@ e-onこれでうまくいくはずです。以前のエラーで申し訳ありません。 – Teletha

関連する問題