根据预先生成的文件名列表读取文件?

时间:2013-02-24 23:26:24

标签: c# multithreading file-io

如果我知道在我的D:\驱动器下会生成100个文件,我知道他们的名字将是001.tif,002.tif,...,100.tif,我该如何继续阅读直到我读完所有100个文件? 文件将是这样的: d:/001.tif d:/002.tif ... d:/100.tif

我不认为FileWatcherSystem或类似的东西是一个不错的选择,因为在这种情况下我不必担心文件事件,因为这些文件肯定会在那里生成。这只是一个时间问题(很快)。 所以我想我只需要无限期地读取硬盘(目标文件夹),直到读完所有文件。 任何人有任何意见我应该怎么做?非常感谢。

1 个答案:

答案 0 :(得分:0)

我基本上使用while(true)循环来观察文件夹;文件准备好后,我会阅读并处理它。完成此过程直到处理完所有文件。这是代码:

 public void ReadIndefinitely(string tiffFileFolder, List<string> channelName, int signalLength)
        {            
            string tiffFileName; 
            int nActiveStats = _signalDisplay.NActiveStatsOneChannel;
            int nActiveChannels = _signalDisplay.NActiveChannel;
            double signal;
            double DeltaT;
            bool keepReading = true;
            int channelIndex;
            int statIndex;
            int signalIndex = 0;

            while (signalIndex < signalLength)
            {                
                for (int i = 0; i < nActiveChannels; i++)
                {
                    tiffFileName = tiffFileFolder + channelName[i] + "_0001_0001_0001_" + (signalIndex + 1).ToString("0000") + ".tif";
                    channelIndex = (int)Enum.Parse(typeof(ChannelList), channelName[i]);
                    keepReading = true;
                    if(keepReading)
                    {
                        if (File.Exists(tiffFileName))
                        {
                            if (!IsFileLocked(tiffFileName))
                            {
                                for (int j = 0; j < nActiveStats; j++)
                                {
                                    statIndex = _statsEnableEnumIndex[j];
                                    DeltaT = ExtractTiffDeltaT(tiffFileName, "DeltaT=", 1);
                                    signal = _signalManager.GetSignal(statIndex, tiffFileName);
                                    UpdateSignal(channelIndex, j, signalIndex, DeltaT, signal);
                                }

                                keepReading = false;
                                signalIndex++;      
                            }
                            else
                            {
                                System.Threading.Thread.Sleep(30);
                            }
                        }
                    }

                   // if (signalIndex % 5 == 0)
                    _signalDisplay.SetData(_XList, _YList, true);
                }


            }
        }

我必须警告你,这个操作占用了我90%的CPU。