0

たとえば、D:\ドライブの下に100個のファイルが生成され、その名前が001.tif、002.tif、...、100.tifになることがわかっている場合、どうすればそれらを読み続けることができますか。 100個のファイルをすべて読みますか?ファイルは次のようになります:D:/001.tif D:/002.tif ... D:/100.tif

FileWatcherSystemなどは、この場合はファイルイベントが確実に生成されるため、ファイルイベントについて心配する必要がないため、適切な選択ではないと思います。それは時間の問題です(すぐに)。したがって、すべてのファイルが読み取られるまで、ハードドライブ(宛先フォルダー)を無期限に読み取る必要があると思います。誰かが私がこれをどのように行うべきかについて意見がありますか?どうもありがとう。

4

1 に答える 1

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が使用されたことを警告する必要があります。

于 2013-02-25T22:41:59.203 に答える