在一些用户的帮助下,他们能够提供阅读文本文件的帮助,在具有指定计数的新文件夹中的组中创建新文件。例如,我正在阅读的文本文件有10,000行(在本例中)。我将其分组以读取1,000行并每次创建一个新文件夹。预期输出应为10个文件夹,每个文件夹中有2,000个对象(1个图像文件,1个元数据文件)。但是,实际输出是在每个文件夹中使用加或减2,000个对象创建的10个文件夹。实际输出也不总是将相应的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个对象不一致,并不总是将两个文件放在同一个文件夹中。非常感谢任何见解!谢谢大家。
答案 0 :(得分: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
}