• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在新文件夹中创建新文件组不一致

c/c++ 来源:Jayarikahs 4次浏览

在一些用户的帮助下,他们能够提供帮助以读取文本文件,在具有指定计数的新文件夹中的组中创建新文件。例如,我正在阅读的文本文件有10,000行(在这种情况下)。我将它分组为每行读取1000行并创建一个新文件夹。预期的输出应该是由每个文件夹中的2,000个对象(1个图像文件,1个元数据文件)创建的10个文件夹。但是,实际输出是使用每个文件夹中的正或负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个对象不一致,并且并不总是将这两个文件放在同一个文件夹中。任何有识之士都非常感谢!谢谢大家。

===========解决方案如下:

您的文件夹变量在所有任务之间共享,并且其值保持不断变化。 尽量使内部的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 
} 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)