簡體   English   中英

Directory.GetAllImageFiles我應該怎么做?

[英]Directory.GetAllImageFiles How should i do it?

我想用在目錄中找到的所有圖像填充String數組。

直到現在我使用以下內容獲取所有jpg格式的圖像

Dim List() as string = Directory.GetFiles(Path, "*.jpg")

現在,我想擴展它並獲取所有圖像格式。

我可以將directory.GetFiles與“ ImageFormat枚舉”結合使用嗎?

嗨,您可以使用我在http://msdn.microsoft.com/zh-cn/library/wz42302f.aspx中作為社區內容找到的內容:

private static string[] GetFiles(string sourceFolder, string filters)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
}

使用延遲評估的替代方法(僅.Net 4.0):

private static IEnumerable<string> GetFiles(string sourceFolder, string filters)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.EnumerateFiles(sourceFolder, filter));
}

您可以像GetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png") 從本質上來說,這只是對每個過濾器的搜索,因此效率盡如人意。

最終版本是(僅.Net 4.0,但至少可以制成2.0解決方案):

private static IEnumerable<string> GetImageFiles(string sourceFolder)
{
   return from file in System.IO.Directory.EnumerateFiles(sourceFolder)
          let extension = Path.GetExtension(file)
          where extension == ".jpg" || extension == ".gif" || extension == ".png"
          select file;
}

我相信最后一個是最快的,因為它只會循環一次。 但這取決於如何在Directory實施模式搜索以及OS如何進行搜索。 我還沒有進行性能測試。

這是2.0 .net解決方案。

我在C#中做了類似的事情。 該解決方案使用文件夾作為要處理圖像的放置點。 在每種情況下將每種類型的文件加載為映像都不是正確的解決方案,但我想將每個文件驗證為可加載的映像。

    string[] files = Directory.GetFiles(folderPath);
    foreach(string file in files)
    {


        System.Drawing.Image img = null;

        try
        {
            img = System.Drawing.Image.FromFile(file);
        }
        catch
        {
            // do nothing
        }

        if (img != null)
        {
            // did something

            img.Dispose();
        }
    }

原來我忘了一件...在處理文件之前,我確實使用了一個函數來限制要處理的文件:

private bool IsImage(FileInfo file)
{
    bool imageFile = false;
    if ((file.Extension.ToLower() ==".jpg")||
       (file.Extension.ToLower() ==".gif")||
       (file.Extension.ToLower() == ".bmp") ||
       (file.Extension.ToLower() ==".png"))
    {
        imageFile = true;
    }

    return imageFile;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM