0

画像データベースを維持しようとしているので、特定のフォルダに新しい画像を追加すると、プログラムは古い画像を追加する必要があります。また、次のコードでstring [] filePathsを使用してそれらを削除しようとしていますが、機能しません...

ルートフォルダ(TrainedFaces)またはサブフォルダ(/ TrainedFaces / eladena /)に存在するファイルが、以前の画像を何度も追加することを回避する場合、私がやろうとしていることは、単純に私を助けてくれますか?私が立ち往生したポイント??

例:-face1、face2、face3をフォルダー(/ TrainedFaces / eladena /)に追加した場合。しばらくして、サイドルートフォルダ(/ TrainedFaces / Linda /)にLindaという別のフォルダを作成し、/ TrainedFaces / Linda /サブフォルダにface4、face5、を追加します。必要なのはface4、face5だけですが、このFORLOOPではface1、face2を追加します。 、face3も同様に/ TrainedFaces /Linda/に重複した/TrainedFaces/ eladena / face1、face2、face3があります。Lambda / linq式がある場合、ループを削除せずにこの問題を回避したいですか?

    for (int i = 1; i < trainingImages.ToArray().Length + 1; i++)
    {
        trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/eladena/face" + i + ".bmp");
        File.AppendAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt", labels.ToArray()[i - 1] + "%");
    }
    MessageBox.Show(textBox1.Text + "´s face detected and added :)", "Training OK", MessageBoxButtons.OK, MessageBoxIcon.Information);

    string[] filePaths = Directory.GetFiles(Application.StartupPath + "/TrainedFaces/", "*.bmp");
    foreach (string filePath in filePaths)
    {
        if (filePath.Contains(".bmp"))
            File.Delete(filePath);
    }
{
    if (filePath.Contains(".bmp"))
        File.Delete(filePath);
}
4

2 に答える 2

0

すでにアップロードされているファイルに基づいて一意のIDを追加するという要件は、それほど拡張性がない可能性があると思います。各画像が追加されると、最後の画像を見つけるために完全なディレクトリスキャンを実行します。これは多くの無駄なI/O操作であり、新しいイメージが追加されるたびに増加します。代わりに、一部の永続システム(通常はデータベースレコードの主キー)で増分値を使用します。最小数の外部システムの使用に関心がある場合は、最後に増分された値を忠実に追跡するRedisを確認してください。

于 2012-09-10T20:12:21.740 に答える
0

Directory.GetFilesで使用できますsearchOption

リンク:http://msdn.microsoft.com/fr-fr/library/ms143316.aspx

SearchOption.AllDirectoriesメソッドに追加する必要がありますGetFiles

リンク: http://msdn.microsoft.com/fr-fr/library/ms143448.aspx

 string[] filePaths = Directory.GetFiles(Path.Combine(Application.StartupPath,"TrainedFaces"), "*.bmp", SearchOption.AllDirectories);
于 2012-09-10T17:46:29.637 に答える