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

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

関連記事

Xamarin.FormsでHelloworldする手順+Buttonコントロール追加のサンプルコード紹介

<目次> (1) Xamarin.FormsでHelloworldする手順  (1-1) Xamarin.Formsプロジェクト構成の概要  (1-2) MainPage.xamlの修正  (1-3) …

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

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

C#のコンソールアプリで引数を与えて実行する方法

<目次> (1) C#のコンソールアプリで引数を与えて実行する方法  (1-1) 設定箇所  (1-2) サンプルプログラム  (1-3) サンプルプログラムの補足 (1) C#のコンソールアプリで引 …

C#のDB接続時のエラー(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server)

<目次> (1) 記事の目的  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対策   (1-3-1) SQLServer:リモート接続を有効化   (1-3-2) SQLSe …

C#のabstract(抽象クラス)とは?継承やoverrideの手順や使い方をご紹介

<目次> (1) C#の抽象クラスやabstractとは?意味や使い方をご紹介  (1-1) 抽象クラスとは?  (1-2) 抽象クラスの使い方   (1-2-1) 抽象クラスの定義   (1-2-2 …

  • English (United States)
  • 日本語
Top