-4

我即将在 C# 中开发一个软件,该软件必须选择遵循以下规则的随机文件夹(在具有或多或少 10.000 个文件夹的场景中):

  1. 仅选择包含文件的那些;
  2. the software must stop the selection when the size of selected folder is 8GB;
  3. 当我复制一个文件夹时,我需要保留该文件夹的整个路径(如果 c:\folder\temp\hello 是复制的,我想保留 d:\COPIED\folder\temp\hello);

我想我会做类似的事情:

  1. 从指定的根目录开始分析整个文件夹列表;
  2. 在此列表中选择随机“行”,将其移动到“选定列表”,计算大小;
  3. 当我达到 8GB 时,我停止第一阶段,开始复制它;

我认为这里不是一个大麻烦。你有什么想法?有什么建议么?

当我移动每个文件夹时,我真正的问题将是“重新创建”每个文件夹的整个路径。我该怎么做?使用 C# API 为每个级别创建文件夹还是有解决方法?

4

1 回答 1

1

所以最后一段是问题吗?我是这样理解的:

如何创建一个包含与源相同路径但具有不同根的新路径?

然后你可以使用这个Path和它的静态方法+String.Substring来获取新路径。

D:\Copied是您在 中使用的根目标文件夹Path.Combine。然后你必须添加没有根文件夹的旧路径(没有方法Path,我将使用Substring):

var rootDest = @"D:\Copy";                                  // your root directory
var pathSource = @"C:\Test\Test.txt";                       // a sample file
var root = Path.GetPathRoot(pathSource);                    // C:\
var oldPathWithoutRoot = pathSource.Substring(root.Length); // Test\Test.txt
var newPath = Path.Combine(rootDest, oldPathWithoutRoot);   // D:\Copy\Test\Test.txt

然后使用File.Copy将文件夹中的所有文件从旧路径复制到新路径。

您必须检查目录是否存在并创建它:

var targetDir = Path.GetDirectoryName(newPath);
if (!Directory.Exists(targetDir))
{
    Directory.CreateDirectory(targetDir);                   // D:\Copy\Test
}
File.Copy(pathSource, newPath);
于 2013-04-17T08:09:08.550 回答