使用本地图像文件夹中的c#搜索图像

时间:2010-06-16 08:35:22

标签: c# .net search

我们有一个图片文件夹,里面有大约一百万张图片。 我们需要编写一个程序,根据用户输入的关键字获取图像。 我们需要在搜索时匹配文件名以找到正确的图像。 寻找任何建议。 谢谢 Ñ

9 个答案:

答案 0 :(得分:4)

  1. 将图片保存在单独的网站或子域中。当然,您可能不希望所有1M文件都在一个目录中。

  2. 您需要一个包含(至少)三个表的数据库:

  3.     ImageFile  
            ID  
            Filepath
    
        Keyword
            ID
            theWord
    
        ImageKeyword
            ImageID
            KeywordID
    

答案 1 :(得分:2)

将所有(图片和关键字)存储在数据库中。

您可以使用全文索引搜索单词,或将每个单词存储为单独的条目。

您可以更快地访问元数据(文件名,创建日期等),而无需检索(或打开)图像本身。

这可能要快得多,因为依赖的文件系统不能在一个文件夹中存储一百万个条目。

答案 2 :(得分:2)

这是显而易见的,但可以想象,对于一百万张图像来说,它会非常慢:

public IList<string> GetMatchingImages(string path, string keyword)
    {
        var matches = new List<string>();

        var images = System.IO.Directory.GetFiles(path);

        foreach (var image in images)
        {
            if (image.Contains(keyword))
            {
                matches.Add(image);
            }
        }

        return matches;
    }

答案 3 :(得分:2)

根据操作系统的不同,我建议您使用索引服务,Windows桌面搜索或最新版本的Windows搜索。这解决了基于关键字的文件查找问题,它解决了文件夹中文件数量方面的性能问题,可扩展,并且可以轻松扩展。

http://msdn.microsoft.com/en-us/library/dd940335(VS.85).aspx上的 DSearch 示例几乎完全符合您的要求并且易于实现。

例如,如果查询一百万个文件并需要将文件移动到子文件夹中以提高性能,那么您只需创建文件夹并移动文件即可。您无需更改任何代码。

如果您需要更改关键字的应用方式,例如使用文件摘要属性的关键字,则只需更改查询。

对于以后的操作系统,您甚至不需要安装任何软件,因为搜索功能是操作系统的一部分,可通过OleDB获得。如果要使用高级查询语法(AQS),Microsoft提供了一个类型库来访问COM接口,以便轻松生成用于查询索引数据库的SQL命令。

老实说,关于数据库的所有其他建议等等都是浪费时间。

答案 4 :(得分:1)

从文件夹中获取一百万个文件名将花费大量时间。我建议你获取文件名并将它们放在数据库中。这样您就可以在几秒钟内而不是几分钟内搜索名称。

答案 5 :(得分:0)

Win32 API FindFirstFile,FindNextFile,FindClose:http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx - 可能它们也以某种方式映射到.NET。使用它们搜索没有任何数据库的图像。

答案 6 :(得分:0)

我对如此大量图片的第一个想法是创建一个反向列表以用作索引。

如果你能够维护这个列表,它会使搜索速度相对较快,你不必搜索一百万张图片,而我猜这些图片对你来说太费时了。

我首先要寻找一些反向列表实现。

答案 7 :(得分:0)

一个简单的解决方案是一个数据库,您可以在其中存储ID,路径和varchar(字符串)字段,您可以在其中保留所有关键字。 (为了提高效率,可以存储在不同的表中)

通过这种方式,您可以按文件名或与图片相关联的关键字进行搜索。

答案 8 :(得分:0)

只需将所有图片重命名为各自由空格分隔的关键字即可。然后使用操作系统自己的搜索功能。

如果这不起作用,那么只有寻找更好的解决方案。