2011-06-23 7 views
3

Recherche de problèmes lors de la copie d'un fichier zip à partir d'un emplacement FTP. C'est juste une copie et un fichier vide donc je pense qu'il y a quelque chose qui cloche avec mon utilisation de StreamReader ou StreamWriter.Téléchargement de fichier ZIP à partir du FTP et copie dans un dossier du site Web

Voici le code:

//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()) 
      { 
      } 
     } 
    } 
} 

Au moment où il arrive au bas de cette section, le fichier a été copié mais est vide, donc je ne pense pas que je lis correctement le flux de un fichier zip. Quelqu'un a des idées? J'ai vu parler de FileStream étant mieux pour le téléchargement de fichiers Zip, mais je ne pouvais pas faire fonctionner ça non plus.

Merci.

Répondre

10

Voici un exemple qui télécharge un fichier à partir d'un 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()); 
} 

Modifier Je suis désolé pour l'erreur dans le code précédent.

Lors de la correction de mon code précédent, j'ai trouvé la ressource suivante utile: example

+0

Salut Teletha - faire des progrès, mais elle est maintenant une erreur fait d'Élever dire « ZipEntry :: ReadDirEntry(): signature Bad » quand je vais essayer de dans le fichier Zip pour parcourir le contenu. Lorsque j'essaie d'ouvrir le fichier zip téléchargé juste dans l'explorateur, cela provoque une erreur disant "Le dossier compressé ... n'est pas valide". N'avez-vous pas besoin d'une méthode de téléchargement différente pour les fichiers Zip? –

+0

Vous avez raison. Cela a fonctionné pour les fichiers normaux et j'ai supposé que cela fonctionnerait également pour les fichiers zip. Je suis désolé. En regardant une solution maintenant. – Teletha

+0

@ e-on Cela devrait fonctionner maintenant. Je suis désolé pour l'erreur précédente. – Teletha

Questions connexes