异步复制文件时获取“无法访问关闭的文件”

本文关键字:文件 访问 复制 获取 异步 | 更新日期: 2023-09-27 18:22:23

我想异步复制多个文件,但我收到了这个错误,

System.ObjectDisposedException: Cannot access a closed file.

这是我的方法,

public Task CopyAllAsync(IList<ProductsImage> productsImage)
{
    var tasks = new List<Task>();
    foreach (var productImage in productsImage)
    {
        var task = _fileService.CopyAsync(productImage.ExistingFileName, productImage.NewFileName);
        tasks.Add(task);
    }
    return Task.WhenAll(tasks);
}

这是FileService.CopyAsync方法,

public Task CopyAsync(string sourcePath, string destinationPath)
{
    using (var source = File.Open(sourcePath, FileMode.Open))
    {
        using (var destination = File.Create(destinationPath))
        {
            return source.CopyToAsync(destination);
        }
    }
}

那么我在等这个,

await _imageService.CopyAllAsync(productsImage);

如果我调试,那么我不会得到这个错误?

异步复制文件时获取“无法访问关闭的文件”

您需要await复制操作,而不是简单地返回任务。这将确保您不会过早结束使用范围,这意味着在FileStream的上调用Dispose

public async Task CopyAsync(string sourcePath, string destinationPath)
{
    using (var source = File.Open(sourcePath, FileMode.Open))
    {
        using (var destination = File.Create(destinationPath))
        {
            await source.CopyToAsync(destination);
        }
    }
}