2016-09-08 4 views
0

apiでファイルストリームを破棄する方法は?apiでファイルストリームを破棄する方法は?

私はこのapiを10回呼び出す必要があるとしましょう。

[HttpGet("{fileName}")] 
public async Task<IActionResult> Get(string fileName) 
{ 
    var res = File.Open(path, FileMode.Open); 
    var file = File(res, "application/zip", fileName); 
    return file; 
} 

apiメソッドからストリームが返される前に処理できません。

プロセスはファイルにアクセスできません「C:\テスト\のexample.zipを」私は二時間、それを呼び出すと

私は例外を取得します、それは別のプロセスで使用されて ですので。

+0

例えば 'StreamReader'を使用すると' Close'を呼び出します。 Btw: '= File(...)'は何をするべきですか?前に 'new'を忘れてしまったのですか、' File'というメソッドがありますか? – HimBromBeere

+0

新しいものはありません。静的です。 https://msdn.microsoft.com/en-us/library/b9skfh7s(v=vs.110).aspx – Raskolnikov

+0

私は2番目の行を覚えています。 – HimBromBeere

答えて

1

まず、並行性とスレッドの安全性について覚えておいてください。 (多くのリクエストはあなたのコントローラに同時に渡すことができます。この場合、ファイルに何かを書いている場合、アプリケーションの動作は間違っている可能性があります)。 あなたは、あなたはちょうどこのような他のスレッドのための共有モードを指定することができ、(読み込みのみ)ファイルへの書き込みされていない場合は、次の

using(var file = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){ 
    //your code goes here 
} 
+0

使用が終了すると、ストリームは廃棄されます。廃棄ストリームを返す方法は? – Raskolnikov

+0

これを使ってファイルストリームを新しいストリームにコピーすることができます。 Stream.CopyToAsync [link] https://msdn.microsoft.com/en-us/library/system.io.stream.copytoasync.aspx –

+0

廃棄されたリソースを返すのはなぜですか? – HimBromBeere

関連する問題