c# - 将 robocopy 与 C# Foreach.Parallel 一起使用
问题描述
我有关于数据表中多个位置的源目录和目标目录的信息。
我正在使用 foreach 并行遍历数据表,然后执行两个任务,将文件复制到 dest 并在 Dest 上重命名复制的文件。
在这样做时,有时我会遇到错误,例如
ERROR 32 (0x00000020) Accessing Source Directory 该进程无法访问该文件,因为它正被另一个进程使用。,
ERROR 32 (0x00000020) Accessing Destination Directory 进程无法访问该文件,因为它正被另一个进程使用。
在重命名时,我收到 错误重命名文件错误,该进程无法访问该文件,因为它正在被另一个进程使用。
例如
var options = new ParallelOptions()
{
MaxDegreeOfParallelism = 4
};
Parallel.foreach(datatableObj.AsEnumerable(), options, row =>{
string sourcePath = row.Field<string>("source_path");
string destPath = row.Field<string>("dest_path");
string searchPattern = row.Field<string>("Search_pattern");
List<string> files=Directory.GetFiles(sourcePath, searchPattern);
string ROBOCOPY_STATIC_ARGUMENTS = @"/MT:32 /BYTES /COPY:DAT /NP /R:3 /W:1";
foreach(string file in fIles)
{
CopyUsingRoboCopy(file,DestPath,ROBOCOPY_STATIC_ARGUMENTS);
RenameFile(file,NewFileName+datetimewithmilliseconds.ext);
}
});
作为以并行方式执行的 2 个线程,但单线程执行是顺序的,即首先复制然后重命名文件。所以我不明白为什么我会收到上面提到的错误。
注意:所有目标路径都相同
解决方案
推荐阅读
- python - 填写elasticsearch数据库中缺失的时间戳数据
- excel - 如果 4 列在 Excel 中匹配,则返回值
- azure - 无法以编程方式下载 Blob
- bitbucket - 如何链接到 Bitbucket wiki 上不同文件夹或根文件夹中的页面?
- android - 是否可以同时检测附近支持蓝牙的智能手机和附近的信标?
- types - Fortran 类型变量在使用 % 运算符访问时为零
- node.js - “结束后写”:如何用watchify模仿gulp-watch?
- python - 2to3 不存在,无法在 Ubuntu 上安装脚本
- tensorflow - 为什么批次不能有可变长度序列/数据条目(例如句子)?
- python - 如何在opencv中找到一条线和polyfit之间的交点?