Directory.Move方法的使用限制

发布时间 2023-12-14 17:43:59作者: wzwyc

今天在写一个小工具的时候,发现在移动文件夹的时候出现了下面的错误:

System.IO.IOException:“Source and destination path must have identical roots. Move will not work across volumes.”

查了一下,说是Directory.Move这个方法不支持跨盘符移动。
于是写测试代码试了一下。

// 可以正常移动文件
File.Move(@"E:\test.txt", @"D:\test.txt");

// 可以正常移动文件夹
Directory.Move(@"E:\xxx\test", @"E:\test");

// 移动失败,会报异常
Directory.Move(@"E:\xxx\test2", @"D:\test2");

测试结果是果然不行。
相当于如果要跨盘符移动文件夹,需要自己手动去另一个盘符先创建文件夹,然后把文件夹里的所有文件都复制到新的文件夹中,再把旧的文件夹删除。
如果包含多层文件夹的话,需要递归操作,每一层都得这样,先创建新文件夹,然后再把文件夹下的文件复制过去。

我非常惊讶自己居然对Directory.Move方法的这个限制没有印象。难道我之前从来就没有跨盘符移动文件夹的需求吗?
惭愧!