Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建一个新路径,该路径包含与源相同的路径,但具有不同的根?_C#_File_Random_Copy - Fatal编程技术网

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

C# 如何创建一个新路径,该路径包含与源相同的路径,但具有不同的根?,c#,file,random,copy,C#,File,Random,Copy,我将要开发一个C语言的软件,它必须在一个场景中选择随机文件夹,该场景中有10000多个文件夹,这些文件夹遵循以下规则: 仅选择包含文件的文件; 当所选文件夹的大小为8GB时,软件必须停止选择; 当我复制单个文件夹时,我需要保留该文件夹的整个路径。如果复制的是c:\folder\temp\hello,我希望保留d:\copied\folder\temp\hello; 我想我会做一些事情,比如: 从指定的根目录开始分析整个文件夹列表; 在此列表中选择随机行,将其移动到所选列表,计算大小; 当我达到8

我将要开发一个C语言的软件,它必须在一个场景中选择随机文件夹,该场景中有10000多个文件夹,这些文件夹遵循以下规则:

仅选择包含文件的文件; 当所选文件夹的大小为8GB时,软件必须停止选择; 当我复制单个文件夹时,我需要保留该文件夹的整个路径。如果复制的是c:\folder\temp\hello,我希望保留d:\copied\folder\temp\hello; 我想我会做一些事情,比如:

从指定的根目录开始分析整个文件夹列表; 在此列表中选择随机行,将其移动到所选列表,计算大小; 当我达到8GB时,我停止第一阶段,并开始复制它; 我认为这不是什么大问题。你觉得怎么样?有什么建议吗

我真正的问题是在移动每个文件夹时为其重新创建整个路径。
我怎么做?使用C API为每个级别创建文件夹,或者是否有解决方法?

所以最后一段是问题所在?我的理解如下:

如何创建一个新路径,该路径包含与源相同的路径,但 用不同的根

然后可以使用和的静态方法+String.Substring来获取新路径

D:\Copied是您在Path.Combine中使用的根目标文件夹。然后您必须添加没有根文件夹的旧路径path中没有用于此操作的方法,我将使用子字符串:

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

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

var targetDir = Path.GetDirectoryName(newPath);
if (!Directory.Exists(targetDir))
{
    Directory.CreateDirectory(targetDir);                   // D:\Copy\Test
}
File.Copy(pathSource, newPath);

好的,但是这个文件夹不存在呢D:\Copy\Test?我会尽量让你知道;它工作完美!非常感谢。Bizzare那-3,真是太蠢了吗?@markzzz:我已经投了更高的票,但是问题并不清楚你试过什么,核心问题是什么。总是问清楚、单一的问题。如果您希望建议更合适。@markzzz:没有目录。复制,您必须循环目录中的所有文件并使用上面的代码。通过这种方式,您还可以捕获发生异常的地方,并登录到文件级。
var targetDir = Path.GetDirectoryName(newPath);
if (!Directory.Exists(targetDir))
{
    Directory.CreateDirectory(targetDir);                   // D:\Copy\Test
}
File.Copy(pathSource, newPath);