次の方法で共有


DirectoryInfo.GetFileSystemInfos メソッド ()

すべてのファイルとディレクトリを一覧表示する、厳密に型指定された FileSystemInfo エントリの配列を返します。

Overloads Public Function GetFileSystemInfos() As FileSystemInfo()
[C#]
public FileSystemInfo[] GetFileSystemInfos();
[C++]
public: FileSystemInfo* GetFileSystemInfos() [];
[JScript]
public function GetFileSystemInfos() : FileSystemInfo[];

戻り値

厳密に型指定された FileSystemInfo エントリの配列。

例外

例外の種類 条件
DirectoryNotFoundException 割り当てられていないドライブであるなど、パスが無効です。

解説

DirectoryInfo 内にファイルまたはディレクトリが存在しない場合、このメソッドは空の配列を返します。

このメソッドの使用例については、以下の「使用例」を参照してください。その他の一般的な I/O タスクまたは関連する I/O タスクの例を次の表に示します。

実行するタスク 参考例があるトピック
テキスト ファイルを作成する。 ファイルへのテキストの書き込み
テキスト ファイルに書き込む。 ファイルへのテキストの書き込み
テキスト ファイルから読み取る。 ファイルからのテキストの読み取り
ディレクトリをコピーする。 Directory
ディレクトリの名前を変更、またはディレクトリを移動する。 Directory.Move

DirectoryInfo.MoveTo

ファイルの名前を変更、またはファイルを移動する。 File.Move

FileInfo.MoveTo

ファイルを削除する。 File.Delete

FileInfo.Delete

ディレクトリを削除する。 Directory.Delete

DirectoryInfo.Delete

ディレクトリを作成する。 CreateDirectory

Directory

サブディレクトリを作成する。 CreateSubdirectory
ディレクトリ内のファイルを参照する。 Name
ディレクトリ内のサブディレクトリを参照する。 GetDirectories

GetDirectories

ディレクトリのサイズを取得する。 Directory
ファイルが存在するかどうかを判別する。 Exists
ディレクトリが存在するかどうかを判別する。 Exists
ファイルの属性を設定する。 SetAttributes
ファイルの属性を取得します。 GetAttributes

使用例

[Visual Basic, C#, C++] パス内のファイルおよびディレクトリの数をカウントする例を次に示します。

 
Imports System
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        ' Specify the directories you want to manipulate.
        Dim di As DirectoryInfo = New DirectoryInfo("c:\")

        Try
            'Get only subdirectories that contain the letter "p."
            Dim dirs As FileSystemInfo() = di.GetDirectories("*p*")
            Console.WriteLine("Number of directories with a p: {0}", dirs.Length)
            Dim diNext As DirectoryInfo
            'Count all the files in each subdirectory that contain the letter "e."
            For Each diNext In dirs
                Console.WriteLine("The number of files and directories " + _
                 "in {0} is {1}", diNext, _
                 diNext.GetFileSystemInfos().Length)
            Next
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

[C#] 
using System;
using System.IO;

class Test 
{
    public static void Main() 
    {
        try 
        {
            DirectoryInfo di = new DirectoryInfo(@"c:\");
            // Get only subdirectories that contain the letter "p."
            FileSystemInfo[] dirs = di.GetDirectories("*p*");
            Console.WriteLine("Number of directories with a p: {0}", dirs.Length);
            // Count all the files in each subdirectory that contain the letter "e."
            foreach (DirectoryInfo diNext in dirs) 
            {
                Console.WriteLine("The number of files and directories " +
                    "in {0} is {1}", diNext, 
                    diNext.GetFileSystemInfos().Length);
            }
        } 

        catch (Exception e) 
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::IO;

int main() {
    try {
        DirectoryInfo* di = new DirectoryInfo(S"c:\\");
        // Get only subdirectories that contain the letter "p."
        FileSystemInfo* dirs[] = di->GetDirectories(S"*p*");
        Console::WriteLine(S"Number of directories with a p: {0}", __box(dirs->Length));
        // Count all the files in each subdirectory that contain the letter "e."
        Collections::IEnumerator* myEnum = dirs->GetEnumerator();
        while (myEnum->MoveNext()) {
            DirectoryInfo* diNext = __try_cast<DirectoryInfo*>(myEnum->Current);
            Console::WriteLine(S"The number of files and directories in {0} is {1}", diNext, 
                __box(diNext->GetFileSystemInfos()->Length));
        }
    } catch (Exception* e) {
        Console::WriteLine(S"The process failed: {0}", e);
    }
}

[Visual Basic, C#, C++] ディレクトリの内容を一覧表示し、その一覧をサイズ順に並べ替える例を次に示します。ディレクトリがサブディレクトリを持つ場合は、それらが先に一覧表示されます。

 
Imports System
Imports System.IO
Imports System.Collections

Class Test

    Dim sc As IComparer = New SizeComparer()
    Private Sub ProcessDirectory(ByVal dir As DirectoryInfo)
        Dim infos As FileSystemInfo() = dir.GetFileSystemInfos()
        Array.Sort(infos, sc)
        Dim f As FileSystemInfo
        For Each f In infos
            If TypeOf f Is DirectoryInfo Then
                ProcessDirectory(CType(f, DirectoryInfo))
            Else
                If TypeOf f Is FileInfo Then
                    ProcessFile(CType(f, FileInfo))
                End If
            End If
        Next f
    End Sub 'ProcessDirectory

    Private Sub ProcessFile(ByVal f As FileInfo)
        Console.WriteLine("{0,16:N0} {1}", f.Length, f.FullName)
    End Sub 'ProcessFile      

    Class SizeComparer
        Implements IComparer
        Public Function Compare(ByVal info1 As Object, ByVal info2 As Object) As Integer Implements IComparer.Compare
            Dim fileInfo1 As FileInfo = info1
            Dim fileInfo2 As FileInfo = info2
            Dim fileSize1 As Long
            If fileInfo1 Is Nothing Then
                Return -1
            Else : fileSize1 = fileInfo1.Length()
            End If
            Dim fileSize2 As Long
            If fileInfo2 Is Nothing Then
                Return -1
            Else : fileSize2 = fileInfo2.Length()
            End If
            If fileSize1 > fileSize2 Then
                Return 1
            End If
            If fileSize1 < fileSize2 Then
                Return -1
            End If
            Return 0
        End Function 'Compare
    End Class 'SizeComparer

    Shared Sub Main()
        Dim myTest As New Test()
        ' Specify the directory whose contents you want to list and sort.
        myTest.ProcessDirectory(New DirectoryInfo("c:\Drivers\net\removed"))
    End Sub 'Main'

End Class 'Test'

[C#] 
using System;
using System.IO;
using System.Collections;

class Test
{
    IComparer sizeComparer = new SizeComparer();
    private void ProcessDirectory(DirectoryInfo dir)
    {
        FileSystemInfo[] infos = dir.GetFileSystemInfos();
        Array.Sort(infos, sizeComparer);
        foreach (FileSystemInfo f in infos)
        {
            if (f is DirectoryInfo) 
            {
                ProcessDirectory((DirectoryInfo)f);                             
            }
            else if (f is FileInfo) 
            {
                ProcessFile((FileInfo)f);
            }
        }
    }

    private void ProcessFile(FileInfo f) 
    {
        Console.WriteLine("{0,16:N0} {1}", f.Length, f.FullName);
    }

    class SizeComparer: IComparer
    {
        public int Compare(object info1, object info2) 
        {
            FileInfo fileInfo1 = info1 as FileInfo;
            FileInfo fileInfo2 = info2 as FileInfo;
            long fileSize1 = fileInfo1 == null? -1: fileInfo1.Length;
            long fileSize2 = fileInfo2 == null? -1: fileInfo2.Length;
            if (fileSize1 > fileSize2) return 1;
            if (fileSize1 < fileSize2) return -1;
            return 0;
        }
    }
    static void Main() 
    {
        // Specify the directory whose contents you want to list and sort.
        new Test().ProcessDirectory(new DirectoryInfo(@"C:\Drivers\net\removed"));
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::IO;
using namespace System::Collections;

__gc class Test {
private:
    __gc class SizeComparer : public IComparer {
    public:
        int Compare(Object* info1, Object* info2) {
            FileInfo* fileInfo1 = dynamic_cast<FileInfo*>(info1);
            FileInfo* fileInfo2 = dynamic_cast<FileInfo*>(info2);
            __int64 fileSize1 = fileInfo1 ? fileInfo1->Length : -1;
            __int64 fileSize2 = fileInfo2 ? fileInfo2->Length : -1;
            if (fileSize1 > fileSize2) return 1;
            if (fileSize1 < fileSize2) return -1;
            return 0;
        }
    };

    IComparer* sizeComparer;

    void ProcessFile(FileInfo* f) {
        Console::WriteLine("{0,16:N0} {1}", f->Length.ToString(), f->FullName);
    }

public:
    Test() {
        sizeComparer = new SizeComparer();
    }

    void ProcessDirectory(DirectoryInfo* dir) {
        FileSystemInfo* infos __gc[] = dir->GetFileSystemInfos();
        Array::Sort(infos, sizeComparer);

        IEnumerator* en = infos->GetEnumerator();
        FileSystemInfo* f;
        while (en->MoveNext()) {
            f = __try_cast<FileSystemInfo*>(en->Current);
            if (dynamic_cast<DirectoryInfo*>(f) != 0) {
                ProcessDirectory(dynamic_cast<DirectoryInfo*>(f));
            } else if (dynamic_cast<FileInfo*>(f) != 0) {
                ProcessFile(dynamic_cast<FileInfo*>(f));
            }
        }
    }

};

int main() {
    // Specify the directory whose contents you want to list and sort.
    (new Test())->ProcessDirectory(new DirectoryInfo(S"C:\\Drivers\\net\\removed"));
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

参照

DirectoryInfo クラス | DirectoryInfo メンバ | System.IO 名前空間 | DirectoryInfo.GetFileSystemInfos オーバーロードの一覧 | FileSystemInfo | 入出力操作 | ファイルからのテキストの読み取り | ファイルへのテキストの書き込み