我的源路径是C:\Music\我有数百个名为Album-1,Album-2等的文件夹.
我想要做的是创建一个Consolidated在我的源路径中调用的文件夹.
然后我想将我的相册中的所有文件移动到该文件夹Consolidated,以便将所有音乐文件放在一个文件夹中.
我怎样才能做到这一点 ?
Tho*_*eld 34
试试这样吧
String directoryName = "C:\\Consolidated";
DirectoryInfo dirInfo = new DirectoryInfo(directoryName);
if (dirInfo.Exists == false)
Directory.CreateDirectory(directoryName);
List<String> MyMusicFiles = Directory
.GetFiles("C:\\Music", "*.*", SearchOption.AllDirectories).ToList();
foreach (string file in MyMusicFiles)
{
FileInfo mFile = new FileInfo(file);
// to remove name collisions
if (new FileInfo(dirInfo + "\\" + mFile.Name).Exists == false)
{
mFile.MoveTo(dirInfo + "\\" + mFile.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
它将获取"C:\ Music"文件夹中的所有文件(包括子文件夹中的文件)并将它们移动到目标文件夹.该SearchOption.AllDirectories会递归搜索所有子文件夹.
您可以使用 Directory 对象来执行此操作,但如果您在多个子目录(例如专辑 1\1.mp3、专辑 2\1.mp3)中具有相同的文件名,则可能会遇到问题,因此您可能需要一些额外的逻辑来在名称上添加一些独特的东西(例如专辑 1-1.mp4)。
public void CopyDir( string sourceFolder, string destFolder )
{
if (!Directory.Exists( destFolder ))
Directory.CreateDirectory( destFolder );
// Get Files & Copy
string[] files = Directory.GetFiles( sourceFolder );
foreach (string file in files)
{
string name = Path.GetFileName( file );
// ADD Unique File Name Check to Below!!!!
string dest = Path.Combine( destFolder, name );
File.Copy( file, dest );
}
// Get dirs recursively and copy files
string[] folders = Directory.GetDirectories( sourceFolder );
foreach (string folder in folders)
{
string name = Path.GetFileName( folder );
string dest = Path.Combine( destFolder, name );
CopyDir( folder, dest );
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,这可以通过 Directory.Move 来完成:
try
{
Directory.Move(source, destination);
}
catch { }
Run Code Online (Sandbox Code Playgroud)
没有看到任何理由,为什么你不应该使用这个功能。它是递归的和速度优化的