Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C#

C#でフォルダ内のファイルの一覧を取得する方法

投稿日:2020年12月24日 更新日:

<目次>

(1) C#でフォルダ内のファイルの一覧を取得する方法
 (1-1) 方法①構文
 (1-2) 方法①サンプルプログラム
 (1-3) 方法②構文
 (1-4) 方法②サンプルプログラム

(1) C#でフォルダ内のファイルの一覧を取得する方法

(1-1) 方法①構文

①通常一致で抽出
DirectoryクラスのGetFilesメソッドで指定フォルダのファイル一覧をstring配列として受け取ります。その各要素に対して「foreach」でアクセスします。
(構文)

string[] [配列名] = Directory.GetFiles(@"[フォルダパス]");
foreach (string [ループ変数名] in [配列名])
{
  //何かの処理
  //(例)↓ファイル名をコンソール出力
  Console.WriteLine(name);
}

 

②部分一致で抽出
指定パターンで与えた文字列と部分一致するファイル名を抽出します。指定にはワイルドカード(*など)が使えますが、正規表現は使えません。
(構文)

string[] [配列名] = Directory.GetFiles(@"[フォルダパス]","[指定パターン]");

目次にもどる

(1-2) 方法①サンプルプログラム

上記「①通常一致」と「②部分一致」の構文を用いたサンプルPGをご紹介します。

前半では指定した[フォルダパス]内にあるファイル一覧をstring[]型で受取り、各要素をforeachでループしています。後半では2つ目の引数を与えて「*.txt」に部分一致するファイルを洗い出してます。

(サンプルプログラム①)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileListCheck
{
  class Program
  {
    static void Main(string[] args)
    {
      //(1)フォルダ配下のファイル一覧の取得(ディレクトリは除く)
      Console.WriteLine("### (1) List all files ###");
      string[] array1 = Directory.GetFiles(@"C:\Temp2\IT0207\");
      foreach (string name in array1)
      {
        Console.WriteLine(name);
      }
      //(2)フォルダ配下の特定の拡張子のファイルを取得
      Console.WriteLine("### (2) List files having .txt extention ###");
      string[] array2 = Directory.GetFiles(@"C:\Temp2\IT0207\", "*.txt");
      foreach (string name in array2)
      {
        Console.WriteLine(name);
      }
    }
  }
}

(図121)実行結果
部分一致の方はちゃんと1件のみヒットしています。

目次にもどる

(1-3) 方法②構文

2つ目の方法は「Directory.EnumerateFiles」を使います。EnumerateFilesを使用する事で、配列全体が返却される前に配列を順次取得する事ができます。

これがGetFilesの場合、配列全体が返却されるまでは配列にアクセスができないため、その点ではEnumerateFilesの方が優れています。そのため、非常に多くのディレクトリやファイルを対象にして処理を行う場合に活躍します。

(構文)Directory.EnumerateFilesでファイル一覧を取得

foreach (string [ループ変数名] in Directory.EnumerateFiles(@"[フォルダパス]"))
{
  // 各ファイルに対して行う処理(例:コンソールにファイルパス出力)
  Console.WriteLine([ループ変数名]);
}

更に、引数に「SearchOption.AllDirectories」を与える事で、フォルダ配下の子フォルダも含めて再帰的にリストアップさせる事ができます。

(構文)Directory.EnumerateFilesで再帰的にファイル一覧を取得

foreach (string [ループ変数名] in Directory.EnumerateFiles(@"[フォルダパス]","*.*",SearchOption.AllDirectories))
{
  Console.WriteLine(@"C\Temp\ : " + file);
}

目次にもどる

(1-4) 方法②サンプルプログラム

(サンプルプログラム)
前半がEnumerateFilesの基本例で、後半が引数にSearchOption.AllDirectoriesを指定して再帰的に探索しています。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileListCheck
{
  class Program
  {
    static void Main(string[] args)
    {
      // (3)指定したディレクトリ配下を全てループ
      Console.WriteLine("### (3) Loop through the given directories ###");
      foreach (string path in Directory.EnumerateFiles(@"C:\Temp2\IT0207\"))
      {
        Console.WriteLine(path);
      }

      // (4)指定フォルダの配下のファイルを再帰的にループして取得
      Console.WriteLine("### (4) Get the file name recursively for the given path ###");
      foreach (string file in Directory.EnumerateFiles(@"C:\Temp2\IT0207\", "*.*",SearchOption.AllDirectories))
      {
        Console.WriteLine(file);
      }
    }
  }
}

(図141)実行結果

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

C#で配列に特定の値があるか?をチェックする方法を2つご紹介~ContainsとLINQ~

<目次> (1) C#で配列に特定の値があるか?をチェックする方法  (1-1) 方法①:ListクラスのContainsメソッドを使う方法   (1-1-1) 構文   (1-1-2) サンプルプロ …

C#で型をStringからintに変更する方法~TryParseメソッドによる型変換~

<目次> (1) C#で型をStringからintに変更する方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) プログラム補足「'{0}’や'{1}’」に …

C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介

  <目次> (1) C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介  (1-1) 概要   (1-1-1) スレッドのライフライクルについて   (1-1-2) ma …

C#のIComparerの実装方法や用法について(サンプルプログラムあり)

<目次> (1) C#のIComparerの実装方法や用法について  (1-1) IComparerの概要  (1-2) STEP0:比較をするクラスの定義  (1-3) STEP1:ICompare …

C#のIListとは?Listとの違いや使いどころもご紹介

<目次> (1) C#のIListとは?Listとの違いや使いどころもご紹介  (1-1) IListやIList<T>とは?  (1-2) Listとの違い  (1-3) IListの利 …

  • English (United States)
  • 日本語
Top