2009-09-11 15 views
2

ftpサーバーからファイルをダウンロードし、Path.GetTempPath()で定義されたディレクトリに保存しています。しかし、私は次のエラーが表示されます:パスの一部を見つけることができませんでした。C#Path.GetTempPathが "パスの一部を見つけることができませんでした"エラーを返します。

返されるパスが正しいことを確認しました.C:\ Users \ [ユーザー名] \ AppData \ Local \ Tempです。

SYSTEM、Administrators、および[username]はすべて、そのディレクトリを完全に制御します。私は一時ディレクトリのポイントは何か/誰もが保存するために開いていたと思ったが、ちょうど場合には、私もNETWORK SERVICEに権限を変更しました。 (私はASP.NET Dev Serverが使用するユーザー名だと思っていますが、わかりません)

私はVistaでVS 08を使用しています。私は本当に私がここで間違ってやっていることについて任意のアイデアをいただければと思います

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(); 
    } 
} 

は、ここに私のコードです。

ありがとうございます!

答えて

5

一時パスの末尾にファイル名を追加する必要があるように見えます。あなたは、ディレクトリ上ではなく、ファイル上のStreamWriterを開くしようとしている

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

ありがとうございます! 上記のコードを使用すると、パスに不正な文字が含まれているとエラーが表示されますが、私は奇妙なfileNameをハードコードするときではありません。 –

+0

fileNameの文字列の値を再度確認します。たぶん奇妙なキャラクターの消毒が必要でしょうか? – Stephen

+0

うん、それをチェックしてください。私はログに文字列を書いています。それはうまく見えます:2009-09-10124317Z_FirstLast_metadata.txtまた、ログからStreamWriterにコピーした文字列をハードコードすると、それは機能します。 –

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

:これを試してみてください。あなたは一時ファイル名をしたい場合は、代わりにPath.GetTempFileName()を使用します。

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

こと、またはSkinniest男が言った何を。

+0

ありがとう!これは動作しますが、ファイルに.tmp拡張子を付けます。ファイル拡張子を保存する方法はありますか? –

+0

ええと、CreateTempFileNameには上書きがないようです。 Path.GetTempPath()、Path.GetRandomFileName、およびPath.ChangeExtensionを使用して何かを行い、必要なファイルを取得できます。しかし、これを行うのではなく、ファイル名を変更せずに書くだけで、Skinniest Manのコードが行うことになります。 – Powerlord

関連する問題