0

特定のフォルダーにファイルが存在するかどうかをチェックする機能があり、ファイルにメインデータベースに存在しないデータが含まれている場合は、そのデータをメインデータベースに書き込み、Directory.EnumerateFilesを使用してリストを取得しているファイルを削除します。ファイルの数を増やしてから、このリストを繰り返してデータベースに存在するかどうかを確認します。リストが空の場合は関数から戻りたいです。取得したリストが空かどうかを確認する方法、デバッグしてフォルダにファイルがない場合列挙が結果を生成しなかったことを示すファイル。

    private void GetListOfFiles()
    {
        string sourceDirectory = pathOfXmlFiles;
        if (!Directory.Exists(sourceDirectory))
        {
            return;
        }
        var xmlFiles = Directory.EnumerateFiles(sourceDirectory, "*.xml");
        foreach (var item in xmlFiles)
        {
            ReadXmlFile(item);
        }
        foreach (var item in xmlFiles)
        {
            if (_writtenToDb)
            {
                File.Delete(item);
            }
        }
    }

25秒ごとに起動するタイマーを持つ別のスレッドを使用してこれらのファイルの存在を確認します。タイマーを停止することはありません。これによりメモリリークが発生する可能性がありますか?

4

1 に答える 1

2

何もする必要はありません。xmlFilesが空の場合foreach、反復するオブジェクトがないため、両方のループは何もしません。

ただし、ファイルがない場合に明示的に返す必要がある場合は、次のようにします。

if(!xmlFiles.Any())
    return;

using System.Linq;ソースファイルの先頭に追加することを忘れないでください。


返されたファイルを複数回列挙しているため、Directory.GetFiles代わりに使用することをお勧めします。これは、すべてのファイルを含む配列を返します。これにより、既存のファイルを照会するためのディスクへの複数のヒットが回避されます。

于 2012-09-03T08:20:24.233 に答える