0

Я разработал веб-API ASP.NET. Я пытаюсь прочитать содержимое файла excel и попытаться вернуть его в виде байтов. Я получаю следующую ошибку:Процесс не может получить доступ к файлу XXX, потому что он используется другим процессом в asp.net web api

The process cannot access the file 'C:\app\MyHost.AppServices\bin\Debug\temp\888.xlsx' because it is being used by another process. 

Я использую код ниже. Я не уверен, что вызывает эту ошибку. Просьба представить свои предложения

public class FileController : MyBase 
    { 
     public HttpResponseMessage Get(string id) 
     { 


      if (String.IsNullOrEmpty(id)) 
       return Request.CreateResponse(HttpStatusCode.BadRequest); 
      var path = Path.Combine("temp", id); 
      var fileStream = File.Open(path, FileMode.Open); 
      HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
      //response.Content = new StreamContent(fileStream); 


      response.Content = new StreamContent(new FileStream(path, FileMode.Open, FileAccess.ReadWrite)); 
      response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment"); 
      response.Content.Headers.ContentDisposition.FileName = id; 

      return response; 

      } 
    } 
+0

Ваша переменная fileStream не используется, и при создании экземпляра StreamContent вы создаете также новый экземпляр FileStream, который не удаляется. – Giedrius

ответ

3

Вы никогда не выбрасывайте файл из var fileStream = File.Open(path, FileMode.Open);, в результате чего он заблокирован.

+0

Я открыл файл с помощью использования блока (который автоматически вызывает dispose()), но даже это не помогло. Я попытаюсь явно вызвать метод dispose. – SharpCoder

+0

Линия, на которую я указал, кажется ненужной, поскольку позже вы не используете 'fileStream' (поскольку вы закомментировали ее использование). Я думаю, что безопасно удалить эту линию. – CodeCaster

+1

с использованием блока 'using' - более надежный способ утилизации, чем вызов вручную, потому что он уверен, что утилизация выполняется, даже если выбрано исключение. С другой стороны, вы всегда можете использовать Process Explorer, чтобы узнать, какой процесс блокирует ваш файл. – Giedrius

 Смежные вопросы

  • Нет связанных вопросов^_^