2009-09-11 11 views
2

Je télécharge un fichier à partir d'un serveur FTP et l'enregistre dans le répertoire défini dans Path.GetTempPath(); cependant, j'obtiens l'erreur suivante: Impossible de trouver une partie du chemin.C# Path.GetTempPath renvoie l'erreur "Impossible de trouver une partie du chemin"

J'ai confirmé que le chemin renvoyé est correct: C: \ Users \ [nom_utilisateur] \ AppData \ Local \ Temp. SYSTEM, les administrateurs et [nom d'utilisateur] ont tous un contrôle total sur ce répertoire.

Je pensais que le point du répertoire temporaire était qu'il était ouvert pour tout/tout le monde à enregistrer, mais juste au cas où, j'ai donné des autorisations Modifier le service réseau aussi. (Je suppose que c'est le nom d'utilisateur que le serveur Dev.NET Dev utilise, mais je ne suis pas sûr.)

J'utilise VS 08 sur Vista.

Voici mon code:

FtpWebRequest downloadRequest = (FtpWebRequest)WebRequest.Create(
    ConfigurationManager.AppSettings["FTPServer"] + "//" + fileName); 

downloadRequest.Credentials = new NetworkCredential(
    ConfigurationManager.AppSettings["FTPUsername"], 
    ConfigurationManager.AppSettings["FTPPassword"]); 

downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile; 

FtpWebResponse downloadResponse = 
    (FtpWebResponse)downloadRequest.GetResponse(); 

try 
{ 
    Stream downloadStream = downloadResponse.GetResponseStream(); 

    if (downloadStream != null) 
    { 
     logger.Info("File Download status: {0}", 
      downloadResponse.StatusDescription); 

     StreamReader downloadReader = new StreamReader(downloadStream); 

     try 
     { 
      if (downloadReader != null) 
      { 

       StreamWriter downloadWriter = 
        new StreamWriter(Path.GetTempPath()); 
       downloadWriter.AutoFlush = true; 
       downloadWriter.Write(downloadReader.ReadToEnd()); 
      } 
     } 
     finally 
     { 
      if (downloadReader != null) 
      { 
       downloadReader.Close(); 
      } 
     } 
    } 
} 
finally 
{ 
    if (downloadResponse != null) 
    { 
     downloadResponse.Close(); 
    } 
} 

J'apprécierais vraiment des idées sur ce que je fais mal ici.

Merci!

Répondre

5

Il me semble que vous devez ajouter un nom de fichier à la fin du chemin temporaire. Essayez ceci:

StreamWriter downloadWriter = 
    new StreamWriter(Path.Combine(Path.GetTempPath(), fileName)); 
+0

Merci! Je reçois des erreurs en disant que mon chemin a des caractères illégaux quand j'utilise le code ci-dessus mais pas quand je code le nom de fichier, ce qui est bizarre. –

+0

Vérifiez la valeur de la chaîne dans fileName. Peut-être qu'il doit être désinfecté de caractères étranges? – Stephen

+0

Ouais, vérifié cela. J'écris la chaîne dans le journal, et ça a l'air bien: 2009-09-10124317Z_FirstLast_metadata.txt. Et si je code en dur la chaîne que j'ai copiée du journal dans le StreamWriter cela fonctionne. –

2
StreamWriter downloadWriter = 
        new StreamWriter(Path.GetTempPath()); 

Vous essayez d'ouvrir le StreamWriter sur un répertoire plutôt que sur un fichier. Si vous voulez un nom de fichier temp, utilisez Path.GetTempFileName() à la place:

StreamWriter downloadWriter = 
        new StreamWriter(Path.GetTempFileName()); 

Ou bien faire ce que dit l'homme skinniest.

+0

Merci! Cela fonctionne, mais il donne au fichier une extension .tmp. Y at-il un moyen de préserver l'extension de fichier? –

+0

Hmm, il semble que CreateTempFileName n'a aucune substitution. Vous pouvez faire quelque chose avec Path.GetTempPath(), Path.GetRandomFileName, et Path.ChangeExtension pour obtenir le fichier que vous voulez, cependant. Cependant, vous pourriez vouloir écrire le nom de fichier inchangé plutôt que de faire tout cela, ce qui est le code de Skinniest Man. – Powerlord

Questions connexes