0

我正在尝试维护一个图像数据库,因此当我将新图像添加到特定文件夹时,我的程序应该附加旧图像。另外,我试图通过使用带有以下代码的 string[] filePaths 来删除它们,但它不起作用......

任何人都可以帮助我吗?简单地说,如果根文件夹(TrainedFaces)或子文件夹(/TrainedFaces/eladena/)中存在的文件避免它一次又一次地添加以前的图像......那就是点我卡住了??

例如:- 如果我将 face1、face2、face3 添加到文件夹(/TrainedFaces/eladena/)。一段时间后,我在侧根文件夹 (/TrainedFaces/Linda/) 中创建了另一个名为 Linda 的文件夹,并在 /TrainedFaces/Linda/ 子文件夹中添加了 face4、face5,我只需要 face4、face5 但因为这个 FOR LOOP 它添加了 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 回答