c# - 使用 CopyToAsync 时,FileStream 使用块未正确处理文件
问题描述
我有一种情况,我需要将一小部分文件异步移动到网络上的另一个位置。我有以下方法可以做到这一点,但是在尝试删除源文件时偶尔会引发 IO 异常(无法访问文件 x,因为它正在被另一个进程使用)。我希望 using 块能够为我处理 FileStreams,所以我不确定发生了什么。
public static async Task MoveFileAsync(string sourceFile, string destinationFile)
{
using (var sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan))
using (var destinationStream = new FileStream(destinationFile, FileMode.CreateNew, FileAccess.Write, FileShare.None, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan))
{
await sourceStream.CopyToAsync(destinationStream);
}
File.Delete(sourceFile);
}
我尝试在 Parallel.ForEach 循环中使用 File.Move 执行此操作,但发现上述方法在我的测试中要快得多。任何有关可能发生的事情的指示将不胜感激。
解决方案
推荐阅读
- java - Space&NewLine Java
- angular - 如何以角度设置动态级联下拉的值?
- python - 有没有办法在旋转和移动布尔蒙版时修复 True 值的丢失?
- sql - 需要查询以使用 max(column_name) 条件连接同一表的 2 列
- python - 读取文件名并插入数据库(使用 python 和 MSSQL)
- php - 如何在页面加载时检查空表单变量
- python - Python ImportError:确认安装后没有名为“请求”的模块
- python - Pandas:对于 df 中的每一行,计算该值在另一列中存在的次数
- python - 一旦函数返回,什么会保留对函数嵌套类的引用?
- node.js - 电子和 MLab