質問

ディレクトリ内にあるすべての画像を含む文字列配列を入力したいと思います。

今まで私は以下を使ってJPG形式ですべての画像を入手します

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

今、私はそれを拡張してすべての画像フォーマットを手に入れたいです。

ImageFormat列挙」と組み合わせたDirectory.getFilesを使用できますか?

役に立ちましたか?

解決

こんにちはあなたは私がコミュニティコンテンツとして見つけたものを使うことができます http://msdn.microsoft.com/en-us/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")のように使用できます。それは本質的に各フィルタのほんの検索であるので、それが得ることができるほど効率的な効率的なものとしてではありません。

最終版は(少なくとも2.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;
}
.

私は一度だけループしかループしないので最後のものが最速であると思います。ただし、これは、Pattern Searchが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帰属
所属していません StackOverflow
scroll top