2013-02-24 60 views
0

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

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

+0

这些文件是否已经存在?或者您想在文件复制/移动到目录时处理这些文件吗? – dtb 2013-02-24 23:29:02

+0

他们还不存在,但他们会。我不知道什么时候,也许在10毫秒,也许在100毫秒,也许在1秒。你是对的,我想在他们准备好之后处理它们(复制/移动/生成)。 – 2013-02-24 23:31:12

+1

听起来像是FileSystemWatcher的工作。使用一个有什么问题? – dtb 2013-02-24 23:32:06

回答

0

我基本上使用while(true)loop来观察文件夹;一旦文件准备好了,我就读它并处理它。该过程完成,直到所有文件都被照顾。这里是代码:

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。

相关问题