У меня есть простой контроллер MVC, который является просто оболочкой для некоторых файлов:
public class ThingyController : Controller
{
public IActionResult Index()
{
return View("Pages/Test.cshtml");
}
public IActionResult Get(string id)
{
byte[] filecontents = System.IO.File.ReadAllBytes(@"C:\thingies\" + id + ".json");
return File(filecontents, "application/json");
}
[HttpPost]
[IgnoreAntiforgeryToken]
[DisableRequestSizeLimit]
public IActionResult Update(string id)
{
byte[] bytes;
using (MemoryStream ms = new MemoryStream())
{
Request.Body.CopyTo(ms);
bytes = ms.ToArray();
}
System.IO.File.WriteAllBytes(@"C:\thingies\" + id + ".json", bytes);
return StatusCode(200);
}
[HttpPost]
[IgnoreAntiforgeryToken]
public IActionResult Create(string id)
{
System.IO.File.WriteAllText(@"C:\thingies\" + id + ".json", "{}");
return StatusCode(200);
}
[HttpPost]
[IgnoreAntiforgeryToken]
public IActionResult Delete(string id)
{
System.IO.File.Delete(@"C:\thingies\" + id + ".json");
return StatusCode(200);
}
}
Я продолжаю получать следующую ошибку при использовании этих методов:
Система.IO.IOException: процесс не может получить доступ к файлу 'C: \ thingies \ test.json', поскольку он используется другим процессом.
Это может быть только мое веб-приложение ядра dotnet, которое обращается к этимфайлы, и я когда-либо использую только однострочные операции System.IO.File, как вы можете видеть, поэтому они должны всегда корректно удаляться / закрываться.
Почему тогда я получаю эти ошибки о другом процессе, использующем их?Это как-то связано с тем, что ядро dotnet запускает несколько процессов?Они мешают друг другу?Если бы это было так, по крайней мере, один из них должен быть успешно завершен, верно?Или, может быть, это как-то связано с тем, что поток управления внезапно завершается, когда вы возвращаете код состояния, до того как обработчики файлов могут быть правильно расположены?Это действительно не должно быть, но у меня были подобные проблемы в прошлом.
Почему?