1

在一些用户的帮助下,他们能够帮助阅读文本文件,在具有指定计数的新文件夹中的组中创建新文件。例如,我正在阅读的文本文件有 10,000 行(在本例中)。我将它分组为读取 1,000 行并每次创建一个新文件夹。预期的输出应该是 10 个文件夹,每个文件夹中有 2,000 个对象(1 个图像文件,1 个元数据文件)。但是,实际输出是创建的 10 个文件夹,每个文件夹中包含正负 2,000 个对象。实际输出也不总是将相应的 1 个图像文件与其 1 个元数据文件放在一起。有时它们在同一个文件夹中(应该是),而其他时候它们在不同的文件夹中(不应该是)。

我逐步完成了该程序,但不明白为什么会发生这种情况。下面是我用来执行上述这些操作的代码。

private string[] sourceline = new string[] {};
private string folder = string.Empty;
private int bs = 1000;

...

Thread t1 = new Thread(
new ThreadStart(() =>
{
    sourceline = File.ReadAllLines(@"C:\guids.txt")

    int batchcount = (sourceline.Length / bs) + 1;

    for (int i = 0; i < batchcount; i++)
    {
        Directory.CreateDirectory(@"C:\zz\" + i.ToString());
    }

    Parallel.For(0, sourceline.Length, x =>
    {
        folder = ((int)(Array.IndexOf(sourceline, sourceline[x]) / bs)).ToString();

        //i call a function here to go retrieve my document
        //findmydoc(objsto, sourceline[x]);  <== this is how I call my function
    }

    Array.Clear(sourceline, 0, sourceline.Length);
    sourceline = null;

}));
t1.IsBackground = true;
t1.Start();

该程序确实读取了整个文本文件并创建了我期望看到的正确数量的文件(在本例中为 20,000 个)。如前所述,它与每个文件夹创建 2,000 个对象不一致,并且并不总是将两个文件放在同一个文件夹中。非常感谢任何见解!谢谢大家。

4

1 回答 1

0

您的文件夹变量在所有任务之间共享,并且它的值不断变化。尝试在 Parallel.For 中创建一个私有变量

Parallel.For(0, sourceline.Length, x =>
{
    string folder = ((int)(Array.IndexOf(sourceline, sourceline[x]) / bs)).ToString();

    //i call a function here to go retrieve my document
}
于 2014-09-19T20:57:45.697 回答