예제 #1
0
        public void BatchProcess(string inputDir, string outputDir)
        {
            DirectoryInfo folder = new DirectoryInfo(inputDir);

            int n     = 0;
            int total = folder.GetFiles("*.arr").Length;
            int step  = (int)Math.Ceiling((double)folder.GetFiles("*.arr").Length / 10000);

            Console.Write("进度 000.00%");
            foreach (FileInfo f in folder.GetFiles("*.arr"))
            {
                FileInfo          file = f;//防止在VS2010下报错
                PrimalArrivalList pal  = new PrimalArrivalList();
                pal.ReadFromArrFile(file.FullName);
                Task ta = factory.StartNew(() =>
                {
                    SellingRecordList Srlist;
                    ControlRecordList Crlist;
                    Process(pal, out Srlist, out Crlist);
                    //判断文件路径是否存在,不存在则创建文件夹
                    if (!System.IO.Directory.Exists(outputDir + @"\Sell"))
                    {
                        System.IO.Directory.CreateDirectory(outputDir + @"\Sell");//不存在就创建目录
                    }
                    Srlist.WriteToFile(outputDir + @"\Sell\" + pal.PAListID + ".sr");
                    if (!System.IO.Directory.Exists(outputDir + @"\Control"))
                    {
                        System.IO.Directory.CreateDirectory(outputDir + @"\Control");//不存在就创建目录
                    }
                    Crlist.WriteToFile(outputDir + @"\Control\" + pal.PAListID + ".cr");
                    if (n++ % step == 0)
                    {
                        lock (folder)
                        {
                            Console.SetCursorPosition(Console.CursorLeft - 7, Console.CursorTop);
                            Console.Write("{0}%", String.Format("{0:000.00}", Math.Round(((double)n / (double)total), 4) * 100));
                        }
                    }
                }, cts.Token);
                tasks.Add(ta);
            }
            Task.WaitAll(tasks.ToArray());
            tasks.Clear();
            Console.SetCursorPosition(Console.CursorLeft - 7, Console.CursorTop);
            Console.WriteLine("100.00 %  完成!");
        }