开发者

copy half the files to one place and other half to other c#

if i have 4 files. and i want to move half of them to disc 1 and half of them to disc 2.

if im using the: Directory.Move(source, destination) im guessing i can change to source by doing a foreach loop + an array or list, but how could i change the destination after half the source files are transfered and the开发者_如何学Cn transfer the other half to the new destination?


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);
}

UPDATE:

Here's a lazy approach which doesn't require you to load all the file names in memory at once which could be used for example in conjunction with the Directory.EnumerateFiles method:

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); 
}


The simple answer is that you would move the individual files instead.

Use a Directory.GetFiles(source) to get a list of files in the folder, get a .Count() of that and then loop through each file and move it.

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);
    }
}


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 */));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜