gpt4 book ai didi

c# - 如何强制删除由 Asp.net core 中的另一个进程使用的文件

转载 作者:行者123 更新时间:2023-12-04 07:17:52 30 4
gpt4 key购买 nike

我正在处理一个 ASP.NET Core 5 项目。我有这个 Action 方法:

public async Task<IActionResult> CreateV3EnterCheckFile(IFormFile MarksFile)
{
var filesCount = Directory.GetFiles("Uploads").Length;

string path = Path.Combine("Uploads", filesCount + 1 + ".xlsx");

await MarksFile.SaveToAsync(path);

var xlImporter = new XLImporter();
var importedData = await xlImporter.ImportSheetAsync(path, 0);

var r = (from x in importedData select new { ID = x[0], StudentId = x[1] }).ToList();

System.IO.File.Delete(path);

return View();
}
我试图得到 IFormFile用户上传文件以将其保存在服务器上并使用我的项目之一(使用 LinqToExcel 库)进行查询。
我正在查询数据,一切都很完美我仍然只有一个问题,就是这行代码:
System.IO.File.Delete(path);
它引发异常,消息是我无法删除该文件,因为它仍在被另一个进程使用。
我非常确定该过程与 LinqToExcel 库有关。
更多详情: SaveToAsync是我创建的扩展方法,即它的定义
 public static Task SaveToAsync(this IFormFile file, string pathToSaveTo)
{
return Task.Factory.StartNew(() =>
{
using (Stream fileStream = File.Open(pathToSaveTo, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
{
file.CopyTo(fileStream);
}
});
}
请 - 是否有任何方法或方法或解决方案可以删除此文件,即使它正在被另一个进程使用?
提前致谢。

最佳答案

基于 ExcelQueryFactory ( https://github.com/paulyoder/LinqToExcel/blob/master/src/LinqToExcel/ExcelQueryFactory.cs ) 的源代码,我会尝试以下操作:

  • ExcelQueryFactory 有一个只读属性。对于只读访问(如果适用),我会在创建实例时将其设置为 true。
  • 更重要的是:IExcelQueryFactory 实现了 IDisposable,所以你可以(应该)使用 using 块:

  • using (var excelFile = new ExcelQueryFactory(pathToExcelFile) {ReadOnly = true})
    {
    // Do your work.
    }
    当然你可以用 using var ... ,但如果您需要更小的范围,“旧” using 语法允许更多控制。

    关于c# - 如何强制删除由 Asp.net core 中的另一个进程使用的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68691363/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com