将一半文件复制到一个地方,将另一半复制到其他c#

时间:2011-03-26 22:52:28

标签: c#

如果我有4个文件。我想将其中一半移动到光盘1,将其中一半移动到光盘2。

如果即时通讯使用: Directory.Move(source, destination) 我猜我可以通过做一个foreach循环+数组或列表来改变源代码, 但是,如果一半源文件被转移,然后将另一半转移到新目的地,我怎么能改变目的地呢?

3 个答案:

答案 0 :(得分:2)

string[] files = ... // create a list of files to be moved
for (int i = 0; i < files.Length; i++)
{
    var sourceFile = files[i];
    var destFile = string.Empty;
    if (i < files.Length / 2)
    {
        destFile = Path.Combine(@"c:\path1", Path.GetFileName(sourceFile));
    }
    else
    {
        destFile = Path.Combine(@"d:\path2", Path.GetFileName(sourceFile));
    }
    File.Move(sourceFile, destFile);
}

更新:

这是一种懒惰的方法,它不需要您一次性加载内存中的所有文件名,例如可以与Directory.EnumerateFiles方法结合使用:

IEnumerable<string> files = Directory.EnumerateFiles(@"x:\sourcefilespath");
int i = 0;
foreach (var file in files)
{
    var destFile = Path.Combine(@"c:\path1", Path.GetFileName(file));
    if ((i++) % 2 != 0)
    {
        // alternate the destination
        destFile = Path.Combine(@"d:\path2", Path.GetFileName(file));
    }
    File.Move(sourceFile, destFile); 
}

答案 1 :(得分:0)

简单的答案是您将移动单个文件。

使用Directory.GetFiles(source)获取文件夹中的文件列表,获取.Count()文件,然后遍历每个文件并移动它。

public void MoveFilesToSplitDestination(string source, string destination1, string destination2)
{
    var fileList = Directory.GetFiles(source);
    int fileCount = fileList.Count();

    for(int i = 0; i < fileCount; i++)
    {
        string moveToDestinationPath = (i < fileCount/2) ? destination1 : destination2;
        fileList[i].MoveTo(moveToDestination);
    }
}

答案 2 :(得分:0)

int rubikon= files.Count() / 2;
foreach (var file in files.Take(rubikon))
    file.Move(/* first destination */));
foreach (var file in files.Skip(rubikon))
    file.Move(/* second destination */));