Filesystemとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > デジタル大辞泉 > Filesystemの意味・解説 

ファイル‐システム【file system】


ファイルシステム

【英】file system

ファイルシステムとは、OSが提供するリソース管理機能の一つで、補助記憶装置に対する低レベルのアクセスをラップし、よりアプリケーションに近いアクセスインターフェースを提供する仕組みのことである。

ファイルシステムは、アプリケーションから見て、データをより容易に扱えるようなインターフェースを提供する。ファイルシステムを用いることによって、デバイスレベルでは1と0の並びでしかないデジタルデータの並びを、ファイルとディレクトリのような論理的な構造としてアプリケーション側に見せることができる。また、このような論理的な構造に対して、統一的なアクセス方法を提供する。例えば、階層的なディレクトリの中で、特定位置を示す方法、データをファイルという固まりとして扱う方法、ファイルをオープン(open)、リード(read)、ライト(write)、クローズ(close)といった標準的な手順で扱う方法を物理的な装置とは独立したレベルで提供するものである。

記憶装置は、それぞれ固有の仕組みを持ち、デバイスドライバのレベルでは、個々の装置固有の制御をしなければならない。一方、アプリケーションから見ると、それぞれの記憶装置がどんなものであるかを気にせずに、単に論理的なデータを透過的に保存したり、読み込んだりしたい。ここでファイルシステムを用いれば、どのような記憶装置に対しても、全く同じ作法でやり取りすることができるようになる。こういう意味で、ファイルシステムは、データの入出力手段を抽象化しているといえる。ファイルシステムが存在することで、アプリケーションの側は、個々の装置の物理的な特性を気にせずに、より汎用的な構造で、仕組みを実現することができるようになる。

Windows系OSでは、FAT、FAT32、NTFSといったファイルシステムが用いられてきた。Macintosh系OSでは、HFSが、Linux系OSでは、ext2、ext3などが用いられてきた。これらは、いずれも、記憶装置としては、磁気ディスク装置(HDD)を想定しており、セクタとよばれる物理レベルのデータの固まりを、如何に効率よく、かつ、使いやすくするかという工夫をしている。なお、CD-ROMやDVD-ROMなどの光ディスク系のメディアでは、ISO 9660などの規格で規定されたCD-ROMファイルシステムが利用されている。磁気ディスクが、書き込みが可能なメディアであるのに対して、光ディスクは、書き込みが不能で、読み出しのみができるため、ディレクトリ構造の表現は、書き換わることが無い前提で、高速に利用できる仕組みになっている。また、OS内のデータの基本単位をデータベースと考えるデータベースファイルシステムや、ネットワーク上でファイルの共有などができる分散ファイルシステムなどもある。

ファイルとフォルダのほかの用語一覧
ファイルシステム:  FAT64  ベーシックディスク  ファイル  ファイルシステム  フォルダ  ファイルタイプ  隠しファイル

FileSystem クラス

メモ : このクラスは、.NET Framework version 2.0 で新しく追加されたものです。

ドライブ、ファイル、およびディレクトリを操作するためのプロパティおよびメソッドを提供します。

名前空間: Microsoft.VisualBasic.FileIO
アセンブリ: Microsoft.VisualBasic (microsoft.visualbasic.dll 内)
構文構文

public class FileSystem
public ref class FileSystem
public class FileSystem
public class FileSystem
解説解説

詳細については、Visual Basic のトピック「My.Computer.FileSystem オブジェクト」を参照してください。

My.Computer.FileSystem オブジェクトを使ったタスクの例を次の表に示します。

目的

参照項目

テキスト ファイルから読み込む。

方法 : Visual Basic でテキスト ファイルを読み取る

区切り記号付きのテキスト ファイルから読み込む。

方法 : Visual Basic でコンマ区切りのテキスト ファイルを読み取る

固定幅のテキスト ファイルから読み込む。

方法 : Visual Basic で固定幅のテキスト ファイルを読み取る

さまざまな形式のテキスト ファイルから読み込む。

方法 : Visual Basic で複数の書式を持つテキスト ファイルを読み取る

バイナリ ファイルから読み込む。

方法 : Visual Basic でバイナリ ファイルを読み取る

MyDocuments ディレクトリに格納されたテキスト ファイルから読み込む。

方法 : My Documents の既存のテキスト ファイルを読み取る (Visual Basic)

StreamReader でテキスト ファイルから読み込む。

方法 : StreamReader を使用してファイルからテキストを読み取る (Visual Basic)

テキスト ファイルに書き込む。

方法 : Visual Basic でテキストをファイルに書き込む

テキスト ファイルに追記する。

方法 : Visual Basic でテキスト ファイルに追記する

バイナリ ファイルに書き込む。

方法 : Visual Basic でバイナリ ファイルに書き込む

MyDocuments ディレクトリに格納されたテキスト ファイルに書き込む。

方法 : Visual Basic で My Documents ディレクトリのファイルにテキストを書き込む

StreamWriter でテキスト ファイルに書き込む。

方法 : Visual Basic で StreamWriter を使用してテキストをファイルに書き込む

特定のパターンでファイルをコピーする

方法 : Visual Basic で特定のパターンを持つファイルをディレクトリにコピーする

ファイルを同じディレクトリにコピーする。

方法 : Visual Basic でファイルのコピーを同じディレクトリに作成する

ファイルを異なるディレクトリにコピーする。

方法 : Visual Basic でファイルのコピーを別のディレクトリに作成する

ファイルを作成する。

方法 : Visual Basic でファイルを作成する

ファイルを削除する。

方法 : Visual Basic でファイルを削除する

ディレクトリ内のすべてのファイルを削除する。

方法 : Visual Basic でディレクトリ内のすべてのファイルを削除する

特定のパターンでファイルを検索する

方法 : Visual Basic で特定のパターンに一致するファイルを検索する

ファイルを移動する。

方法 : Visual Basic でファイルを移動する

複数のファイルを移動する。

方法 : Visual Basic でファイルのコレクションを移動する

ファイルの名前を変更する。

方法 : Visual Basic でファイルの名前を変更する

ディレクトリの名前を変更する。

方法 : Visual Basic でディレクトリの名前を変更する

あるディレクトリを別のディレクトリにコピーする。

方法 : Visual Basic でディレクトリを別のディレクトリにコピーする

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

方法 : Visual Basic でディレクトリを作成する

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

方法 : Visual Basic でディレクトリを削除する

特定のパターンでサブディレクトリを検索する。

方法 : Visual Basic で特定のパターンに一致するサブディレクトリを検索する

ディレクトリから複数のファイルを取得する。

方法 : Visual Basic でディレクトリにあるファイルのコレクションを取得する

ディレクトリ内のファイル数を調べる。

方法 : ディレクトリに含まれているファイルの数を確認する

ディレクトリを移動する。

方法 : Visual Basic でディレクトリを移動する

ディレクトリの内容を移動する。

方法 : Visual Basic でディレクトリの内容を移動する

MyDocuments ディレクトリの内容を読み込む。

方法 : Visual Basic で My Documents ディレクトリの内容を取得する

ファイル パスを解析する。

方法 : Visual Basic でファイル パスを解析する

使用例使用例

この例では、フォルダ C:\backup\logs が存在するかどうかを確認し、そのプロパティをチェックしています。

Dim logInfo As System.IO.DirectoryInfo
If My.Computer.FileSystem.DirectoryExists("C:\backup\logs")
 Then
    logInfo = My.Computer.FileSystem.GetDirectoryInfo _
    ("C:\backup\logs")
End If
継承階層継承階層
System.Object
  Microsoft.VisualBasic.FileIO.FileSystem
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
FileSystem メンバ
Microsoft.VisualBasic.FileIO 名前空間
FileSystem クラス
その他の技術情報
My.Computer.FileSystem オブジェクト
My.Computer.FileSystem オブジェクトのメンバ
My.Computer.FileSystem.SpecialDirectories オブジェクト
My.Computer オブジェクト

FileSystem クラス

FileSystem モジュールに含まれるプロシージャを使って、ファイル、ディレクトリ、またはフォルダ、およびシステムの操作を実行します。My 機能を使用すると、FileSystem モジュールを使用した場合よりファイル I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。

名前空間: Microsoft.VisualBasic
アセンブリ: Microsoft.VisualBasic (microsoft.visualbasic.dll 内)
構文構文

Public NotInheritable Class
 FileSystem
public sealed class FileSystem
public final class FileSystem
解説解説
使用例使用例

この例では、GetAttr 関数を使用してファイルおよびフォルダまたはディレクトリの属性を決定します。

Dim MyAttr As FileAttribute
' Assume file TESTFILE is normal and readonly.
MyAttr = GetAttr("C:\TESTFILE.txt")   '
 Returns vbNormal.

' Test for normal.
If (MyAttr And FileAttribute.Normal) = FileAttribute.Normal
 Then
   MsgBox("This file is normal.")
End If

' Test for normal and readonly.
Dim normalReadonly As FileAttribute
normalReadonly = FileAttribute.Normal Or FileAttribute.ReadOnly
If (MyAttr And normalReadonly) = normalReadonly
 Then
   MsgBox("This file is normal and readonly.")
End If

' Assume MYDIR is a directory or folder.
MyAttr = GetAttr("C:\MYDIR")
If (MyAttr And FileAttribute.Directory) = FileAttribute.Directory
 Then
   MsgBox("MYDIR is a directory")
End If
継承階層継承階層
System.Object
  Microsoft.VisualBasic.FileSystem
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

FileSystem コンストラクタ


FileSystem プロパティ


パブリック プロパティパブリック プロパティ

参照参照

関連項目

FileSystem クラス
Microsoft.VisualBasic.FileIO 名前空間
FileSystem クラス

その他の技術情報

My.Computer.FileSystem オブジェクト
My.Computer.FileSystem オブジェクトのメンバ
My.Computer.FileSystem.SpecialDirectories オブジェクト
My.Computer オブジェクト

FileSystem メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド CombinePath 2 つのパスを結合し、適切な形式のパスを返します。
パブリック メソッド CopyDirectory オーバーロードされます。 あるディレクトリを別のディレクトリにコピーします。
パブリック メソッド CopyFile オーバーロードされます。 ファイルを新しい場所にコピーします。
パブリック メソッド CreateDirectory ディレクトリを作成します。
パブリック メソッド DeleteDirectory オーバーロードされます。 ディレクトリを削除します。
パブリック メソッド DeleteFile オーバーロードされます。 ファイルを削除します。
パブリック メソッド DirectoryExists 指定したディレクトリが存在するかどうかを示す Boolean 値を返します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。)
パブリック メソッド FileExists 指定したファイルが存在するかどうかを示す Boolean 値を返します。
パブリック メソッド FindInFiles オーバーロードされます。 指定されたテキストが格納されたファイル名を表す文字列の読み取り専用コレクションを返します。
パブリック メソッド GetDirectories オーバーロードされます。 ディレクトリに含まれるサブディレクトリのパス名を表す文字列のコレクションを返します。
パブリック メソッド GetDirectoryInfo 指定したパスの DirectoryInfo オブジェクトを返します。
パブリック メソッド GetDriveInfo 指定したドライブの DriveInfo オブジェクトを返します。
パブリック メソッド GetFileInfo 指定したファイルの FileInfo オブジェクトを返します。
パブリック メソッド GetFiles オーバーロードされます。 ディレクトリ内のファイル名を表す文字列の読み取り専用コレクションを返します。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。)
パブリック メソッド GetName 指定されたパスからファイル名を解析し、取り出します。
パブリック メソッド GetParentPath 指定されたパスの親パスを返します。
パブリック メソッド GetTempFileName 一意な名前を持つ 0 バイトの一時ファイルをディスク上に作成し、そのファイルへの完全パスを返します。
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 ( Object から継承されます。)
パブリック メソッド MoveDirectory オーバーロードされます。 ディレクトリの場所を移動します。
パブリック メソッド MoveFile オーバーロードされます。 ファイルを新しい場所に移動します。
パブリック メソッド OpenTextFieldParser オーバーロードされます。 OpenTextFieldParser メソッドを使用すると、ログのような構造化テキスト ファイルを簡単かつ効率的に解析する方法を提供する TextFieldParser オブジェクト を作成できます。TextFieldParser オブジェクトは、区切り形式および固定幅の、どちらのファイルの読み込みにも使用できます。
パブリック メソッド OpenTextFileReader オーバーロードされます。 StreamReader を開きます。
パブリック メソッド OpenTextFileWriter オーバーロードされます。 StreamWriter を開きます。
パブリック メソッド ReadAllBytes テキスト ファイルの内容をバイト配列として返します。
パブリック メソッド ReadAllText オーバーロードされます。 テキスト ファイルの内容を String として返します。
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。)
パブリック メソッド RenameDirectory ディレクトリの名前を変更します。
パブリック メソッド RenameFile ファイルの名前を変更します。
パブリック メソッド ToString  現在の Object を表す String を返します。 ( Object から継承されます。)
パブリック メソッド WriteAllBytes バイナリ ファイルにデータを書き込みます。
パブリック メソッド WriteAllText オーバーロードされます。 ファイルにテキストを書き込みます。
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

FileSystem クラス
Microsoft.VisualBasic.FileIO 名前空間
FileSystem クラス

その他の技術情報

My.Computer.FileSystem オブジェクト
My.Computer.FileSystem オブジェクトのメンバ
My.Computer.FileSystem.SpecialDirectories オブジェクト
My.Computer オブジェクト

FileSystem メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド ChDir 現在のディレクトリまたはフォルダを変更します。My 機能を使用すると、ChDir 関数を使用した場合よりファイル I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CurrentDirectory プロパティ」を参照してください。
パブリック メソッド ChDrive オーバーロードされます。 現在のドライブを変更します。
パブリック メソッド CurDir オーバーロードされます。 現在のパスを表す文字列を返します。My.Computer.FileSystem オブジェクト を使用すると、CurDir を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CurrentDirectory プロパティ」を参照してください。
パブリック メソッド Dir オーバーロードされます。 指定パターンまたはファイル属性と一致するファイル名、ディレクトリ名、フォルダ名を表す文字列、またはドライブのボリューム ラベルを表す文字列を返します。My.Computer.FileSystem オブジェクト を使用すると、Dir 関数を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetDirectoryInfo メソッド」を参照してください。
パブリック メソッド EOF ランダム モードまたはシーケンシャル入力モードで開いたファイルの現在位置がファイルの末尾に達している場合、ブール値 True を返します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。)
パブリック メソッド FileAttr FileOpen 関数を使用して開いたファイルのファイル モードを表す列挙体を返します。My.Computer.FileSystem オブジェクト を使用すると、FileAttr 関数を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetFileInfo メソッド」を参照してください。
パブリック メソッド FileClose FileOpen 関数を使用して開いたファイルへの入出力 (I/O) を終了して、ファイルを閉じます。My を使用すると、ファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileCopy ファイルをコピーします。My.Computer.FileSystem オブジェクト を使用すると、FileCopy を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CopyFile メソッド」を参照してください。
パブリック メソッド FileDateTime ファイルの作成日時または最終変更日時を示す日付型 Date の値を返します。My 機能を使用すると、FileDateTime を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetFileInfo メソッド」を参照してください。
パブリック メソッド FileGet オーバーロードされます。 開かれたディスク ファイルのデータを変数に読み込みます。My 機能を使用すると、FileGet を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileGetObject 開かれたディスク ファイルのデータを変数に読み込みます。My 機能を使用すると、FileGetObject を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileLen ファイルの長さをバイト単位で指定する Long 値を返します。My 機能を使用すると、FileLen を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetFileInfo メソッド」を参照してください。
パブリック メソッド FileOpen ファイルを開いて入出力を行います。My 機能を使用すると、FileOpen を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FilePut オーバーロードされます。 変数の内容をディスク上のファイルに書き込みます。My 機能を使用すると、FilePut を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FilePutObject 変数の内容をディスク上のファイルに書き込みます。My 機能を使用すると、FilePutObject を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileWidth FileOpen 関数を使用して開いたファイルに出力行の桁数を割り当てます。
パブリック メソッド FreeFile FileOpen 関数で使用できる次のファイル番号を表す Integer 値を返します。
パブリック メソッド GetAttr ファイル、ディレクトリ、またはフォルダの属性を表す FileAttribute 型の値を返します。My 機能を使用すると、FileAttribute を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 ( Object から継承されます。)
パブリック メソッド Input オーバーロードされます。 開いているシーケンシャル ファイルからデータを読み込み、そのデータを変数に代入します。
パブリック メソッド InputString 入力 モードまたはバイナリ モードで開いたファイルからの文字を含む String 値を返します。My 機能を使用すると、InputString を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド Kill ファイルをディスクから削除します。My 機能を使用すると、Kill を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド LineInput 開かれたシーケンシャル ファイルから 1 行を読み込み、String 変数に割り当てます。
パブリック メソッド Loc 開かれたファイル内の現在の読み込みと書き込みの位置を指定する Long 値を返します。
パブリック メソッド Lock オーバーロードされます。 Open 関数を使用して開かれたファイルの全部または一部に対して、他のプロセスからのアクセスを制御します。My 機能を使用すると、Lock および Unlock を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド LOF FileOpen 関数を使用して開かれたファイルのサイズをバイト単位で表す Long を返します。My 機能を使用すると、LOF を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド MkDir 新しいディレクトリを作成します。My 機能を使用すると、MkDir を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CreateDirectory メソッド」を参照してください。
パブリック メソッド Print 表示形式データをシーケンシャル ファイルに書き込みます。
パブリック メソッド PrintLine 表示形式データをシーケンシャル ファイルに書き込みます。
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。)
パブリック メソッド Rename ディスク ファイルまたはディレクトリの名前を変更します。My 機能を使用すると、Rename を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド Reset FileOpen 関数を使用して開いたすべてのディスク ファイルを閉じます。My 機能を使用すると、Reset を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド RmDir 既存のディレクトリを削除します。My 機能を使用すると、RmDir を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.DeleteDirectory メソッド」を参照してください。
パブリック メソッド Seek オーバーロードされます。 FileOpen 関数を使用して開いたファイル内の現在の読み込み位置または書き込み位置を示す Long を返します。また、FileOpen 関数で開いたファイルの、次に読み込みまたは書き込みを行う位置を設定します。My 機能を使用すると、Seek を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド SetAttr ファイルの属性情報を設定します。My 機能を使用すると、SetAttr を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド SPC Print 関数または PrintLine 関数と共に使用し、出力の位置を移動させます。
パブリック メソッド TAB オーバーロードされます。 Print 関数または PrintLine 関数と共に使用し、出力の位置を移動させます。
パブリック メソッド ToString  現在の Object を表す String を返します。 ( Object から継承されます。)
パブリック メソッド Unlock オーバーロードされます。 Open 関数を使用して開かれたファイルの全部または一部に対して、他のプロセスからのアクセスを制御します。My 機能を使用すると、Lock および Unlock を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド Write データをシーケンシャル ファイルに書き込みます。Write で書き込まれたデータは、通常、Input でファイルから読み込まれます。
パブリック メソッド WriteLine データをシーケンシャル ファイルに書き込みます。Write で書き込まれたデータは、通常、Input でファイルから読み込まれます。
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

FileSystem クラス
Microsoft.VisualBasic 名前空間

その他の技術情報

FileSystem モジュール (Visual Basic)
ディレクトリとファイルの概要
入出力の概要
キーワードとメンバ (タスク別)
Visual Basic 言語のキーワード
Visual Basic ランタイム ライブラリのメンバ
各言語のキーワードの比較

FileSystem メンバ

ドライブ、ファイル、およびディレクトリを操作するためのプロパティおよびメソッドを提供します。

FileSystem データ型で公開されるメンバを以下の表に示します。


パブリック コンストラクタパブリック コンストラクタ
  名前 説明
パブリック メソッド FileSystem FileSystem クラスの新しいインスタンスを初期化します。
パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド CombinePath 2 つのパスを結合し、適切な形式のパスを返します。
パブリック メソッド CopyDirectory オーバーロードされます。 あるディレクトリを別のディレクトリにコピーします。
パブリック メソッド CopyFile オーバーロードされます。 ファイルを新しい場所にコピーします。
パブリック メソッド CreateDirectory ディレクトリを作成します。
パブリック メソッド DeleteDirectory オーバーロードされます。 ディレクトリを削除します。
パブリック メソッド DeleteFile オーバーロードされます。 ファイルを削除します。
パブリック メソッド DirectoryExists 指定したディレクトリが存在するかどうかを示す Boolean 値を返します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。)
パブリック メソッド FileExists 指定したファイルが存在するかどうかを示す Boolean 値を返します。
パブリック メソッド FindInFiles オーバーロードされます。 指定されたテキストが格納されたファイル名を表す文字列の読み取り専用コレクションを返します。
パブリック メソッド GetDirectories オーバーロードされます。 ディレクトリに含まれるサブディレクトリのパス名を表す文字列のコレクションを返します。
パブリック メソッド GetDirectoryInfo 指定したパスの DirectoryInfo オブジェクトを返します。
パブリック メソッド GetDriveInfo 指定したドライブの DriveInfo オブジェクトを返します。
パブリック メソッド GetFileInfo 指定したファイルの FileInfo オブジェクトを返します。
パブリック メソッド GetFiles オーバーロードされます。 ディレクトリ内のファイル名を表す文字列の読み取り専用コレクションを返します。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。)
パブリック メソッド GetName 指定されたパスからファイル名を解析し、取り出します。
パブリック メソッド GetParentPath 指定されたパスの親パスを返します。
パブリック メソッド GetTempFileName 一意な名前を持つ 0 バイトの一時ファイルをディスク上に作成し、そのファイルへの完全パスを返します。
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド MoveDirectory オーバーロードされます。 ディレクトリの場所を移動します。
パブリック メソッド MoveFile オーバーロードされます。 ファイルを新しい場所に移動します。
パブリック メソッド OpenTextFieldParser オーバーロードされます。 OpenTextFieldParser メソッドを使用すると、ログのような構造化テキスト ファイルを簡単かつ効率的に解析する方法を提供する TextFieldParser オブジェクト を作成できます。TextFieldParser オブジェクトは、区切り形式および固定幅の、どちらのファイルの読み込みにも使用できます。
パブリック メソッド OpenTextFileReader オーバーロードされます。 StreamReader を開きます。
パブリック メソッド OpenTextFileWriter オーバーロードされます。 StreamWriter を開きます。
パブリック メソッド ReadAllBytes テキスト ファイルの内容をバイト配列として返します。
パブリック メソッド ReadAllText オーバーロードされます。 テキスト ファイルの内容を String として返します。
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。)
パブリック メソッド RenameDirectory ディレクトリの名前を変更します。
パブリック メソッド RenameFile ファイルの名前を変更します。
パブリック メソッド ToString  現在の Object を表す String を返します。 (Object から継承されます。)
パブリック メソッド WriteAllBytes バイナリ ファイルにデータを書き込みます。
パブリック メソッド WriteAllText オーバーロードされます。 ファイルにテキストを書き込みます。
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

FileSystem クラス
Microsoft.VisualBasic.FileIO 名前空間
FileSystem クラス

その他の技術情報

My.Computer.FileSystem オブジェクト
My.Computer.FileSystem オブジェクトのメンバ
My.Computer.FileSystem.SpecialDirectories オブジェクト
My.Computer オブジェクト

FileSystem メンバ

FileSystem モジュールに含まれるプロシージャを使って、ファイル、ディレクトリ、またはフォルダ、およびシステムの操作を実行します。My 機能を使用すると、FileSystem モジュールを使用した場合よりファイル I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。

FileSystem データ型で公開されるメンバを以下の表に示します。


パブリック メソッドパブリック メソッド
( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド ChDir 現在のディレクトリまたはフォルダを変更します。My 機能を使用すると、ChDir 関数を使用した場合よりファイル I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CurrentDirectory プロパティ」を参照してください。
パブリック メソッド ChDrive オーバーロードされます。 現在のドライブを変更します。
パブリック メソッド CurDir オーバーロードされます。 現在のパスを表す文字列を返します。My.Computer.FileSystem オブジェクト を使用すると、CurDir を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CurrentDirectory プロパティ」を参照してください。
パブリック メソッド Dir オーバーロードされます。 指定パターンまたはファイル属性と一致するファイル名、ディレクトリ名、フォルダ名を表す文字列、またはドライブのボリューム ラベルを表す文字列を返します。My.Computer.FileSystem オブジェクト を使用すると、Dir 関数を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetDirectoryInfo メソッド」を参照してください。
パブリック メソッド EOF ランダム モードまたはシーケンシャル入力モードで開いたファイルの現在位置がファイルの末尾に達している場合、ブール値 True を返します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。)
パブリック メソッド FileAttr FileOpen 関数を使用して開いたファイルのファイル モードを表す列挙体を返します。My.Computer.FileSystem オブジェクト を使用すると、FileAttr 関数を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetFileInfo メソッド」を参照してください。
パブリック メソッド FileClose FileOpen 関数を使用して開いたファイルへの入出力 (I/O) を終了して、ファイルを閉じます。My を使用すると、ファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileCopy ファイルをコピーします。My.Computer.FileSystem オブジェクト を使用すると、FileCopy を使用した場合より I/O 操作の生産性およびパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CopyFile メソッド」を参照してください。
パブリック メソッド FileDateTime ファイルの作成日時または最終変更日時を示す日付型 Date の値を返します。My 機能を使用すると、FileDateTime を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetFileInfo メソッド」を参照してください。
パブリック メソッド FileGet オーバーロードされます。 開かれたディスク ファイルのデータを変数に読み込みます。My 機能を使用すると、FileGet を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileGetObject 開かれたディスク ファイルのデータを変数に読み込みます。My 機能を使用すると、FileGetObject を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileLen ファイルの長さをバイト単位で指定する Long 値を返します。My 機能を使用すると、FileLen を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.GetFileInfo メソッド」を参照してください。
パブリック メソッド FileOpen ファイルを開いて入出力を行います。My 機能を使用すると、FileOpen を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FilePut オーバーロードされます。 変数の内容をディスク上のファイルに書き込みます。My 機能を使用すると、FilePut を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FilePutObject 変数の内容をディスク上のファイルに書き込みます。My 機能を使用すると、FilePutObject を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド FileWidth FileOpen 関数を使用して開いたファイルに出力行の桁数を割り当てます。
パブリック メソッド FreeFile FileOpen 関数で使用できる次のファイル番号を表す Integer 値を返します。
パブリック メソッド GetAttr ファイル、ディレクトリ、またはフォルダの属性を表す FileAttribute 型の値を返します。My 機能を使用すると、FileAttribute を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド Input オーバーロードされます。 開いているシーケンシャル ファイルからデータを読み込み、そのデータを変数に代入します。
パブリック メソッド InputString 入力 モードまたはバイナリ モードで開いたファイルからの文字を含む String 値を返します。My 機能を使用すると、InputString を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド Kill ファイルをディスクから削除します。My 機能を使用すると、Kill を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド LineInput 開かれたシーケンシャル ファイルから 1 行を読み込み、String 変数に割り当てます。
パブリック メソッド Loc 開かれたファイル内の現在の読み込みと書き込みの位置を指定する Long 値を返します。
パブリック メソッド Lock オーバーロードされます。 Open 関数を使用して開かれたファイルの全部または一部に対して、他のプロセスからのアクセスを制御します。My 機能を使用すると、Lock および Unlock を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド LOF FileOpen 関数を使用して開かれたファイルのサイズをバイト単位で表す Long を返します。My 機能を使用すると、LOF を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド MkDir 新しいディレクトリを作成します。My 機能を使用すると、MkDir を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.CreateDirectory メソッド」を参照してください。
パブリック メソッド Print 表示形式データをシーケンシャル ファイルに書き込みます。
パブリック メソッド PrintLine 表示形式データをシーケンシャル ファイルに書き込みます。
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。)
パブリック メソッド Rename ディスク ファイルまたはディレクトリの名前を変更します。My 機能を使用すると、Rename を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド Reset FileOpen 関数を使用して開いたすべてのディスク ファイルを閉じます。My 機能を使用すると、Reset を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド RmDir 既存のディレクトリを削除します。My 機能を使用すると、RmDir を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem.DeleteDirectory メソッド」を参照してください。
パブリック メソッド Seek オーバーロードされます。 FileOpen 関数を使用して開いたファイル内の現在の読み込み位置または書き込み位置を示す Long を返します。また、FileOpen 関数で開いたファイルの、次に読み込みまたは書き込みを行う位置を設定します。My 機能を使用すると、Seek を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド SetAttr ファイルの属性情報を設定します。My 機能を使用すると、SetAttr を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド SPC Print 関数または PrintLine 関数と共に使用し、出力の位置を移動させます。
パブリック メソッド TAB オーバーロードされます。 Print 関数または PrintLine 関数と共に使用し、出力の位置を移動させます。
パブリック メソッド ToString  現在の Object を表す String を返します。 (Object から継承されます。)
パブリック メソッド Unlock オーバーロードされます。 Open 関数を使用して開かれたファイルの全部または一部に対して、他のプロセスからのアクセスを制御します。My 機能を使用すると、Lock および Unlock を使用した場合よりファイル I/O 操作の生産性とパフォーマンスが向上します。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。
パブリック メソッド Write データをシーケンシャル ファイルに書き込みます。Write で書き込まれたデータは、通常、Input でファイルから読み込まれます。
パブリック メソッド WriteLine データをシーケンシャル ファイルに書き込みます。Write で書き込まれたデータは、通常、Input でファイルから読み込まれます。
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

FileSystem クラス
Microsoft.VisualBasic 名前空間

その他の技術情報

FileSystem モジュール (Visual Basic)
ディレクトリとファイルの概要
入出力の概要
キーワードとメンバ (タスク別)
Visual Basic 言語のキーワード
Visual Basic ランタイム ライブラリのメンバ
各言語のキーワードの比較

ファイルシステム

(Filesystem から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/08/04 21:14 UTC 版)

ファイルシステム(英: file system、filesystem)は、コンピュータのリソースを操作するための、オペレーティングシステム (OS) が持つ機能の一つ。ファイルとは、主に補助記憶装置に格納されたデータを指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。

より正確に定義すれば、ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。ファイルシステムを特殊用途のデータベース管理システム (DBMS) と見なせるかどうかは議論があるが、ファイルシステムとデータベース管理システムには多くの共通点がある。

概要

最も身近なファイルシステムは補助記憶装置上のもので、「セクタ」などと呼ばれる通常512バイトの固定サイズの「ブロック」の配列にアクセスするものである。ファイルシステムはこのセクタ群を使用してファイルやディレクトリを構成し、各セクタがどのファイルに使用され、使用されていないセクタはどれなのかを把握する必要がある。

しかし、ファイルシステム自体は記憶装置を利用する必要はない。ファイルシステムはデータへの操作とアクセスを提供するものであり、対象データが記憶装置に格納されているか (例えば、ネットワーク接続経由で) 動的に生成させるかは問題ではない[1]。

ファイルシステムがストレージ上にあるかどうかに関わらず、一般的なファイルシステムはファイルのファイル名を束ねるディレクトリを持つ。通常、ファイル名は何らかのファイル・アロケーション・テーブルのインデックスと対応しており、それはDOSのファイルシステムであるFATでも、Unix系ファイルシステムでのinodeでもそのようになっている。ディレクトリ構造は平坦な場合もあるし、ディレクトリの下にサブディレクトリのある階層構造の場合もある。いくつかのファイルシステムではファイル名も構造化されていて、拡張子やバージョン番号の文法が存在する。そうでない場合、ファイル名は単なる文字列であり、ファイル毎のメタデータは適当な場所に格納される。

階層型ファイルシステムはUNIXで有名なデニス・リッチーの初期の研究対象であった。それまでの実装では階層はあまり深くできなかった。例えばIBMの初期に生まれたデータベース管理システムであるIMSなどがそうである。UNIXの成功により、リッチーはその後のOS開発 (Plan 9やInferno) でもファイルシステムのコンセプトを様々な対象に広げていった。

初期のファイルシステムはファイルとディレクトリの生成、移動、削除といった機能を提供していた。ディレクトリへの追加リンクを生成する機能 (UNIXにおけるハードリンク)、親リンク (Unix系OSにおける..) の名称変更、ファイル間の双方向リンクの生成といった機能は当初は存在しなかった。

初期のファイルシステムはファイルの切捨て (内容を一部削除すること)、ファイルとファイルの連結、ファイルの生成、ファイルの移動、ファイルの削除、ファイルの更新などの機能を提供していた。ファイルの先頭へのデータ挿入 (prepend)、ファイルの先頭からの内容切捨て、任意の位置の内容の削除や挿入などといった機能は提供されていなかった。提供された操作は対称性に乏しく、どんな状況でも便利というものではない。例えばUNIXにおけるプロセス間のパイプはファイルシステム上には実装できない。というのもパイプはファイル先頭からの切捨てに対応できないためである。

ファイルシステムの基本操作への安全なアクセスはアクセス制御リストまたはケーパビリティに基づいて行われる。研究によれば、アクセス制御リストは完全なセキュリティを確保するのが困難といわれており、研究中の最新のOSではケーパビリティが使われる傾向にある。商用ファイルシステムはまだアクセス制御リストを使用している (コンピュータセキュリティ参照)。

また、アプリケーションソフトウェアの中にも、独自のファイルシステムを採用しているものがある。(FMRシリーズ・FM TOWNS用のワープロソフトウェアである「FM-OASYS」など)

分類

ファイルシステムはディスクファイルシステム、分散ファイルシステム、特殊用途のファイルシステムに分類できる。

ディスクファイルシステム

「ディスクファイルシステム」は、直接的か間接的かに関わらずコンピュータシステムに接続された補助記憶装置、特にハードディスク上にファイルを格納するためのものである。ディスクファイルシステムとしては、FAT、NTFS、HFS、ext2、ext3、ext4、WAFL(英語版)、ISO 9660、ODS-5(英語版)、UDF、HPFS、JFS、UFS、VTOC、XFSなどがある。ディスクファイルシステムの一部はジャーナルファイルシステムまたはバージョニングファイルシステムでもある。

データベースファイルシステム

データベースに基づいたファイルシステムである。メインフレームにあったVSAMのように以前からあるものであり、何ら新しいコンセプトではない。通常のファイルシステムでは、設計の時点でその情報構造が決め打ちで決定されている、ファイルの型、内容、作者などといったメタデータの代わりに、各データベース毎に設定されるメタデータに基づいた管理するが、従来のファイルシステムをその上にマップすることもできる。操作はデータベース操作言語 (例えばSQL) で行われる。データベース管理システムが通常のファイルにアクセスしてデータベースを操作するのに比べオーバーヘッドの削減による性能向上などが期待される。BFS、GnomeVFS、HFS+、WinFSなどがある。

トランザクションファイルシステム

ファイル操作により引き起こされる、ディスク上のデータ構造を操作するイベントやトランザクションを、それ用に確保してある領域にまず記録してから行うものである。多くの場合データ構造の操作は相互に関連しているため、「どれも全く行われていない」か「全て成功裏に完了した」のどちらかでなければ、壊れた状態ということになってしまう。例として銀行から銀行へ電子送金する場合を考えてみよう。銀行のコンピュータは、もう一方の銀行へ転送命令を「送信」し、自身の記録として転送開始したことを保持しておく。もし、コンピュータが記録を更新する前に何らかの原因でクラッシュしてしまった場合、転送したという記録が残っていないし、お金だけが失われる。トランザクションシステムは、このような間違いを、事前の記録と照合することにより検出して、切り戻すか再実行し、健全な状態を保とうとするシステムである。各トランザクションは記録され、どこで何をしたのかという完全な記録を残す。この種のファイルシステムはフォールトトレラント設計であることを意図して設計されているため、オーバーヘッドが大きくなる。

ネットワークファイル共有とファイルシステム

ネットワークに対応したOSの多くが、ファイル共有のためのプロトコルを備えている。これを分散ファイルシステムと呼ぶ。

Windowsで標準的なSMB/CIFS、あるいはMacintoshのAFP、UNIXのNFSなどが有名である。

こういったネットワークファイルシステムは、共有元のファイルシステムを抽象化した、別の一種のファイルシステムとして扱われる。

個々のOSが標準とするNTFS、UFS、HFS+、ext3、HPFS、BFSなどの差異も、Sambaなどを使ったファイル共有では実用上の問題はほとんど無くなる。ただし、ファイル名制限自体は存在し、また拡張属性等が利用できないなどの問題はあり得る。

なお、WindowsやmacOSを対象にしたNAS装置でも、内部のハードディスクドライブ (HDD) ではReiserFSやXFSなどが使われている場合が少なくない。

特殊用途のファイルシステム

特殊用途のファイルシステムとは、ディスクファイルシステムでも分散ファイルシステムでもないものを意味する。ソフトウェアが動的にファイルを用意するようなシステムがこれに当たる。用途としてはプロセス間の通信のためだったり、一時的なファイル空間のためだったりする。

特殊用途のファイルシステムはUNIXのようなファイル中心のOSで主に使用されている。例えば一部のUNIX系システムで使用されている procfs (/proc) ファイルシステムは、プロセスや他のOS機能の情報へのアクセスを提供している。

ボイジャー計画などの深宇宙探査機ではデジタルテープに基づいた特殊なファイルシステムが使われた。最近の探査機カッシーニはリアルタイムオペレーティングシステム (RTOS) のファイルシステム (あるいはRTOSに影響されたファイルシステム) を使用している。マーズ・パスファインダーのローバーもそのようなRTOSファイルシステムを使用しているが、これらはフラッシュメモリに実装されている点が重要である。

ファイルシステムとオペレーティングシステム

ほとんどのオペレーティングシステム (OS) はファイルシステムを提供しており、ファイルシステムは最近のOSの重要な部分となっている。初期のマイクロコンピュータのOSではファイル管理がほとんど唯一の仕事であり、「ディスクオペレーティングシステム (DOS)」というその名前にも現われている。初期のOSにはディスクオペレーティングシステムと呼ばれるファイルシステム相当の部分が存在していた。マイクロコンピュータによっては、その部分だけをロードして使用することができた。初期のOSでは、唯一の名前のないファイルシステムがサポートされていた。例えば、CP/Mにも独自のファイルシステムがあるが、改めて名前を付けるほどの機能は持っていない。

一般に、OSはファイルシステムに関する次の2種類のインタフェースを提供する。1種類目はプログラムのためにカーネルが提供するシステムコール群であり、2種類目はユーザによるファイル操作のための、コマンド群やグラフィカルユーザインタフェースによるツール (いわゆるファイルマネージャ等) などである。真に重要なのは前者である。なぜなら後者はOSによって提供される以外のプログラムを使っても何ら問題ないからである。しかし後者だけがインタフェースの全てであるかのように思われていることもまた、多いようである。

組み込み用途向けや、特定用途向けのOSでは、ファイルシステムをサポートしていなかったり、ファイルシステムをサポートしていても、実際の利用時にファイルシステムを使用しないこともある。このようなケースでは、コンピュータは外部記憶装置を持っていないか、持っていてもOSからは単なるデータストリームとして認識し、直接アドレスを指定することでアクセスされる。このように、ファイルシステムはコンピュータやOSにとって必須の機能ではない。

平坦なファイルシステム

平坦なファイルシステムでは、ディレクトリが存在せず、ハードディスクドライブ (HDD) であれフロッピーディスクであれ、全てが唯一の階層に格納される。単純なシステムだが、ファイルの数が増えるにつれてユーザーがデータを分類して管理することが非常に困難となり、非能率的になった。

他の初期の小規模システムと同様、Mac OSは当初、平坦なファイルシステム、Macintosh File System(英語版) (MFS) を採用していた。そのバージョンのMac OSでは、Finderがあたかも階層があるかのようにファイルシステムを見せかけていた。MFSは即座に本当のディレクトリをサポートしたHierarchical File Systemに置き換えられた。

UNIXとUnix系システムのファイルシステム

UNIXとUnix系OSは、各デバイスにデバイス名を設定するが、デバイス上のファイルにそれを使ってアクセスするわけではない。UNIXは仮想ファイルシステムを生成し、全てのデバイス上の全てのファイルがひとつの階層構造内にあるように見せかける。従って、UNIXにはひとつのルートディレクトリがあり、全てのファイルはその下のどこかに配置されるのである。さらにUNIXのルートディレクトリは物理的にデバイス上に存在している必要がない。それはそのシステムの1台目のディスクにあるとは限らず、そのシステム内にあるとも限らない。UNIXではルートディレクトリをネットワーク経由で共有することができる。

別のデバイス上のファイルにアクセスするため、最初にOSにそのデバイスのファイル群をディレクトリツリー上のどこに置くか (見せるか) を指示しなければならない。この処理をファイルシステムのマウント (英: mount) と呼ぶ。例えば、CD-ROM内のファイルにアクセスするには、OSに対して「このCD-ROMのファイルシステムを、このディレクトリの下にツリーとして見せろ」と指示しなければならない。このときに指定するディレクトリを「マウントポイント」と呼ぶ。Unix系システムには/mediaや/mntディレクトリがあることが多く、フロッピーディスクやCDといった媒体を一時的にマウントするのに使われる。マウントされるデバイスは何も格納されていないこともあるし、サブディレクトリがあるかもしれない。一般に、システムアドミニストレータ (すなわちスーパーユーザー)だけがファイルシステムのマウントを行うことができる。

Unix系OSにはマウント処理のためのソフトウェアやツールがあり、新たな機能も提供されている。そのひとつとして「自動マウント (英: auto-mount)」がある。

多くの場合、ルート以外のファイルシステムもブート直後からOSにとって必要とされる。全てのUnix系システムはブート時にファイルシステムをマウントする機能を提供している。システムアドミニストレータは、それらのファイルシステムをfstab(英語版)ファイルに定義しておく。fstabにはオプションやマウントポイントが記述される。

場合によっては、後で必要とされるとしてもブート時にファイルシステムをマウントする必要がないこともある。Unix系システムには要求されたときに初めてファイルシステムを自動的にマウントする機能もある。

可搬記憶媒体は非常に一般化してきた。可搬媒体は物理的に接続されていないコンピュータ間でプログラムやデータを転送することを可能とする。最も一般的なものとしてCD-ROMとDVDがある。それらが機器に挿入されたことを自動的に検知し、その中身がファイルシステムとして使用可能であることをチェックし、自動的にマウントするユーティリティも開発されてきた。

最新のUnix系システムでは「スーパーマウント (英: supermount)」と呼ばれる機能が登場している。実例としてthe Linux supermount-ng projectを参照されたい。例えば、スーパーマウントされたフロッピーディスクはシステムから物理的に取り去ることができる。通常、補助記憶装置は内容の同期を取る必要があり、その後にアンマウント (unmount) 処理をしてから取り去らなければならない。これに対して、スーパーマウントではアンマウントする必要が無く、続いて次の媒体を挿入することができる。システムは自動的にそれを検知しマウントポイント以下の内容を新たな媒体のものに変更する。

同様の機能として一部ユーザーが好んで使うのはautofsである。このシステムはスーパーマウントに似ていて、マウントコマンドを手で入力する必要がない。異なるのは、分散ファイルシステムなどを経由して使用する際の互換性に優れていて、媒体の挿入を検知するのではなく、アプリケーションがそのファイルシステムの中身にアクセスしようとしたときにマウントするようになっている点である。従って、ネットワークサーバなどで使われている。

スワップファイルシステム

Unix系OSではDOSのOSとは違い、仮想メモリのためのHDD利用に、仮想メモリファイルのほかにスワップファイルシステムも利用する。

DOSでは、HDDのパーティション内 (OSからドライブとして認識されるFATやNTFSのファイルシステム内) に、スワップ用の隠しシステムファイルを作成する。

Unix系OSでは、たとえばLinuxではスワップ用パーティションを用意し、mkswap、swaponコマンドで利用可能とする。DOSと同様に、OSからドライブとして認識される一般ファイルシステム内にスワップファイルを作成し、それを手動或いは自動的に増減させる事も複数のツールで可能である。 FreeBSDなどの場合は、BIOSから扱われるパーティションをスライスと呼称し、その中にさらに独自に管理する複数のパーティションとしてスワップファイルシステムを構築する。

macOSのファイルシステム

macOSのファイルシステムはClassic Mac OSから継承したHFSX (HFS+) である。HFSXはメタデータが豊富で大文字/小文字保護をするファイルシステムである。macOSはPOSIXに準拠しているが、HFSXにもPOSIX ACL準拠のパーミッション情報が追加されている。HFSXにはジャーナルが追加されてファイルシステム構造の破損を防ぐようになり、自動的にフラグメント化したファイルを正規ブロックにするなどのアロケーション機能の最適化もいくつか導入されている。

ファイル名は最大255文字である。HFS+はファイル名の格納に独自のルールで正規分解したUnicodeを使用している。macOSではファイルフォーマットはファイル名のタイプコードや拡張子等から総合的に判断している。Mac OS X v10.5からはUTIを用いてより柔軟にフォーマットを判断する。

POSIX系のファイルシステムとは異なり、ファイルをディレクトリの相対位置でアクセスするため、理論上パス 長に制限がない。ただ、基盤となるDarwinがUNIX互換を保つため、システムの多くの部分で1024文字を限界としている。Carbonを経由し、HFSXを直接アクセスする場合はこの限りではない。

HFSXには3種類のリンクがある。ハードリンクとシンボリックリンクとエイリアス(英語版)である。エイリアスはリンク先のファイルが移動されたり改名されたりしてもリンクし続けるようになっている。

ベル研究所のPlan 9のファイルシステム

Plan 9 from Bell Labs (Plan 9) はUNIXの長所を拡張して新たなアイデアを導入し、UNIXの欠点を修正したものとして計画された。

ファイルシステムの観点から言えば、UNIX的に何でもファイルとして扱うという思想は変わっていないが、Plan 9では本当に「すべて」がファイルとして扱われ、アクセスされる (つまりioctlもmmapもない)。ファイルインターフェイスを汎用化すると同時にそれを大幅に単純化している。例えば、シンボリックリンクもハードリンクもsuidも古い機能とされ (obsolete)、アトミックなcreate/open操作が導入された。重要な点はファイル操作がうまく定義されているためにioctlなどを排除できたことである。

また、9Pプロトコルによってローカルとリモートのファイルの違いが無くなっている (時間的な遅延だけは残っている)。このため、ネットワーク経由で別のコンピュータシステム上のデバイス (これもファイルとして表される) をローカルにあるデバイスと全く同じように操作することが可能となっている。従ってPlan 9の元では、複数のファイルサーバをひとつのファイルシステムに見せることができる。この「合成」ファイルシステムのサーバ群は、システムの単純さを保ちながらマイクロカーネルの利点を生かしてユーザー空間で動作することもできる。

Plan 9では全てのものがファイルとして抽象化されている。ネットワーク、グラフィックス、認証、暗号化など様々なサービスをファイル識別子経由の入出力で扱える。例えば、NATなしでIPスタックのゲートウェイシステムを構築したり、追加コードなしでネットワーク透過なウィンドウシステムを提供したりできる。

Plan 9のアプリケーションはFTPサイトからFTPサービスを受けることもできる。ftpfsサーバによってリモートのFTPサイトをローカルのファイルシステムにマウントすることができ、普通のファイルシステムとして扱えるのである。仮想的なファイルやディレクトリを合成するファイルサーバで /mail/fs/mbox をユーザーのメールボックスとするような電子メールシステムもある。wikifsはwikiへのファイルシステムインターフェイスを提供する。

これらのファイルシステムは、プロセス毎のプライベートな名前空間によって構成される。そのため、各プロセスは分散システムに存在する数々のファイルシステムを固有の観点で見ることができる。

Infernoは、これらの概念をPlan 9から受け継いでいる。

Windowsのファイルシステム

Windowsのファイルシステムの歴史

Windowsは、CP/M、次いでMS-DOSを継承して開発されており、MS-DOSのファイルシステムであったFATはWindowsでも用いられている。FATファイルシステムの古い版では、ファイル名に強い制限があり、FATでフォーマットできるディスクやパーティションのサイズにも強い制限があった。 MS-DOSがUnix的なファイル管理を導入した事から、以降のマイクロソフト製OSでは同様の方針が継承されている。

また、IBMとマイクロソフトで共同開発していたOS/2には、FATに加え、FATの欠点を補ったHPFSというファイルシステムが用意された。Windows NTでも、NT 4.0までHPFSをサポートした。

Windows NTにはその後、OS/2のHPFSをより進化させたNTFSが用意された。その結果、Windowsでは FATとNTFSという2種類のファイルシステムが存在することとなった。後には自社新開発のReFSにも対応するようになってきている。他にApple系ファイルシステムや、光ディスク用ファイルシステムにも対応しており、アプリケーション・ソフトウェアやドライバーで他のファイルシステムにも対応可能。

WindowsはGUIを通してユーザーと対話するため、ディレクトリを「フォルダの一種」として扱い、フォルダアイコンでグラフィカルに表示している。

NTFSの仕様

NTFSはACLベースのパーミッション制御を可能とした。ハードリンク、代替データストリーム、属性索引、クオータ管理、圧縮、ファイルシステム間のマウントポイント (ジャンクションと呼ばれる)、不良セクタの動的ホットフィックスなどがサポートされている。ただし、一部の仕様は未公開である。

ドライブレター

Windowsでは、UNIX系のファイルシステムとは異なり、「ドライブレター」によってディスクやパーティションをユーザーに見せている。例えば C:\\WINDOWS\\ というパス はCドライブにある WINDOWS ディレクトリを意味している。

Cドライブは1台目のハードディスクパーティションを表すものとして使われることが多く、そこにブート時に起動されるWindowsが格納される。この「伝統」は非常に堅固に植えつけられているため、一時期のWindowsには必ずCドライブにインストールされるという仕様が存在することもあった。これは、DOSから受け継がれた伝統で、AとBがフロッピーディスクドライブ用に予約されていたために Cドライブ以降がハードディスクとなったものである。ネットワークドライブにも同様のドライブ文字がマップされる。ただし、PC-9800シリーズおよびその互換機では、HDD上のWindowsをOSとして起動したときAドライブがHDDに割り当てられた。

Windows NT系OSでは、NTエグゼクティブレベルではドライブレターそのものは実体として存在しなくなった。従前のドライブレターは例えばC:ならば、デバイスオブジェクト\\??\\C:から\\Device\\HarddiskVolume1などのボリュームデバイスオブジェクトへのシンボリックリンクで、従来のWindowsと互換性を持たせている。Windows NT系でも見かけ上ドライブレターに縛られていると誤解される場合があるが、例えばボリュームにドライブレターを与えず、ジャンクションによって特定のディレクトリにボリュームを割り当てた場合、ドライブレターを介する事なくボリュームにアクセスできるといった形でNT系ではドライブレターが必須の要素で無くなった事を知ることが出来る。ただし、Win32サブシステムの制約により、Win32アプリはNTエグゼクティブレベルのディレクトリを起点にパス名を指定する事はできない。例えば、Win32サブシステムの制約を受けないInterixサブシステムでは可能。また、WAIK (Automated Installation Kit) を利用する事でC:\\以外にもインストールする事も可能。

ハイバネーション領域

パーソナルコンピュータ (パソコン) ではハイバネーションという機能が使える場合がある。この機能を使うとメモリー内容をHDD等に保存して電源を落とし、再度電源投入した際に速やかに作業を再開できる。この為にはハイバネーションファイルを利用するものと、ハイバネーション用パーティションを作成するものが存在する。

ハイバネーション用パーティションを作成する場合は、特殊なファイルシステムとも考えられるが、実際には単にメモリーをベタ複製しているだけとも言える。

リカバリー領域

市販パソコンでは、リカバリー領域と呼ばれる隠しパーティションをもつものがある。

リカバリー領域のファイルシステムについての情報は通常、公開されていない。リカバリー領域をもつパソコンは実質すべてがWindows付属のため、Windows用のNTFSやFAT32等でフォーマットされていると推測される。

OpenVMSのファイルシステム

これについては、Files-11で解説する。

MVS (IBM汎用コンピュータ) のファイルシステム

これについては、MVSファイルシステムで解説する。

ファイルシステムと対応するパーティション番号

IBM PC/ATやPC-9800シリーズ等ではHDDのパーティションごとの利用目的を判別しやすくするため、パーティションごとに番号を与えている。

この番号により、OSの起動時の、利用すべきパーティションの自動判別が速やかに行なわれる。

ただし、正常な設定が行なわれていない場合も考えて、実際のファイルシステム状況を分析して認識する処理が一般的。 具体的には、HPFSと同じパーティション番号を引き継いで開発されたNTFSのような計画上の問題もあった。

また、開発組織がまったく違うために、Linux用のスワップファイルシステムとサン・マイクロシステムズのSolarisのファイルシステムが同じ番号を持ってしまったような例もある。

こういった状況では、誤った認識でデータ破壊が起きる可能性がある。

比較

一般情報

ファイルシステム名 開発者 登場年 最初にサポートしたOS
RT-11 DEC 1973年 RT-11
FAT12 マイクロソフト 1977年 Microsoft Disk BASIC
ODS-2 DEC 1979年 VMS
UFS (FFS) カーク・マキュージック 1983年 4.2BSD
HFS Apple 1985年 Macintosh System 2.1
FAT16 マイクロソフト 1987年 MS-DOS 3.31
HPFS IBM & マイクロソフト 1988年 OS/2
JFS IBM 1990年 AIX[注釈 1]
VxFS VERITAS 1991年 SVR4.0
NTFS マイクロソフト 1993年 Windows NT
ext2 レミ・カール 1993年 Linux
UFS (FFFS) カーク・マキュージック 1994年 4.4BSD
XFS SGI 1994年 IRIX
UDF ISO/Ecma International/OSTA 1995年 -
FAT32 マイクロソフト 1996年 Windows 95 OSR2[注釈 2]
HFS Plus Apple 1998年 Mac OS 8.1
ext3 スティーブン・トウィーディ 1999年 Linux
VMFS VMware 2000年 VMware ESX
ReiserFS Namesys 2001年 Linux
UFS2 カーク・マキュージック 2002年 FreeBSD 5.0
HFSX Apple 2003年 Mac OS X v10.3
ZFS サン・マイクロシステムズ 2004年 Solaris
Reiser4 Namesys 2004年 Linux
NILFS NTT 2005年 Linux
ext4 Mingming Cao, Dave Kleikamp, Alex Tomas, Andrew Morton他 2006年 Linux
exFAT マイクロソフト 2006年 Windows Embedded CE 6.0
btrfs オラクル 2007年 Linux
HAMMER-FS Matthew Dillon (en:Matthew Dillon)  2008年 DragonFly BSD 2.0
ReFS マイクロソフト 2012年 Microsoft Windows Server 2012
APFS Apple 2017年 macOS High Sierra

諸元

最大ファイル名長 ディレクトリ名に使える文字種[注釈 3] 最大パス名長 最大ファイルサイズ 最大ボリュームサイズ[注釈 4]
Btrfs 255バイト NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 16 – EiB 16 EiB
ext2 255バイト NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 16 – GiB – 2 – TiB[注釈 4] 2 TiB – 32 TiB
ext3 255バイト NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 16 GiB – 2 TiB[注釈 4] 2 TiB – 32 TiB
ext4 255バイト NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 16 GiB – 16 TiB 1 EiB
FAT12 8.3形式 (または255文字)[注釈 7] NUL 以外の全Unicode[注釈 7][注釈 5] 制限の定義無し[注釈 6] 32 – MiB 1 MiB – 128 MiB
FAT16 8.3形式 (または255文字)[注釈 7] NUL 以外の全Unicode[注釈 7][注釈 5] 制限の定義無し[注釈 6] 2 GiB 16 MiB – 4 GiB
FAT32 8.3形式 (または255文字)[注釈 7] NUL 以外の全Unicode[注釈 7][注釈 5] 制限の定義無し[注釈 6] 4 GiB 512 MiB – 2 TiB[注釈 8]
HFS+ 255文字 (UTF-16)[注釈 9] 任意の正しいUnicode[注釈 10][注釈 5] 無制限 8 EiB 8 EiB[注釈 11]
HFS 31バイト : 以外の任意のバイト 無制限 2 GiB 2 TiB
JFS 255バイト NUL以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 8 EiB 512 TiB – 4PiB
NILFS 255文字 NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 8 EiB 8 EiB
NTFS 255文字 NUL 以外の全Unicode Unicodeで32,767文字 (ファイル名やディレクトリ名はそれぞれ255文字まで)[注釈 6] 16 EiB[注釈 12] 16 EiB[注釈 12]
ReFS 255文字 (UTF-16) NUL 以外の全Unicode Unicodeで32,767文字 (ファイル名やディレクトリ名はそれぞれ255文字まで)[注釈 6] 16 EiB 3.76ZiB
Reiser4 不明 不明 制限の定義無し[注釈 6] x86では 8 TiB 不明
ReiserFS 4032バイト/255バイト (VFSによる制限) NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 8 TiB[注釈 13] 16 TiB
RT-11 12バイト A-Z, 0-9, $ 16バイト 33,554,432バイト (65536 * 512) 33,554,432バイト
UDF 255バイト NUL 以外の全Unicode 1023バイト[注釈 14] 16 EiB 不明
UFS (FFS) 255バイト NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 4 GiB 256 TiB
UFS (FFFS) 255バイト NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 4 GiB – 256 TiB 256 TiB
UFS2 255バイト NUL 以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 512 GiB – 32 PiB 1 YiB
VxFS 255バイト NUL以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 16 EiB 不明
XFS 255バイト NUL以外の任意のバイト[注釈 5] 制限の定義無し[注釈 6] 8 EiB[注釈 15] 8 EiB[注釈 15]

メタデータ

ファイル所有者名を保持 POSIX式ファイルパーミッション 作成時タイムスタンプ (TS) 最新アクセス時TS 最新メタデータ更新TS 最新アーカイブTS ACL セキュリティ/MACラベル 拡張ファイル属性/フォーク チェックサム/ECC
RT-11 × × × ○ ○ × × × × ×
FAT12 × × ○ ○ × × × × ×[注釈 16] ×
FAT16 × × ○ ○ × × × × ×[注釈 16] ×
FAT32 × × ○ ○ × × × × × ×
HPFS ○[注釈 17] × ○ ○ × × × 不明 ○ ×
NTFS ○ ×[注釈 18] ○ ○ ○ × ○ 不明 ○ ×
ReFS ○ × ○ ○ ○ × ○ 不明 ○ ○
HFS × × ○ × × ○ × × ○ ×
HFS+ ○ ○ ○ ○ ○ ○ ○ 不明 ○ ×
UFS (FFS) ○ ○ × ○ ○ × × × × ×
UFS (FFFS) ○ ○ × ○ ○ × ○[注釈 19] ○[注釈 19] ×[注釈 20] ×
UFS2 ○ ○ ○ ○ ○ × ○[注釈 19] ○[注釈 19] ○ ×
ext2 ○ ○ × ○ ○ × ○[注釈 21] ○[注釈 21] ○ ×
ext3 ○ ○ × ○ ○ × ○[注釈 21] ○[注釈 21] ○ ×
ext4 ○ ○ ○ ○ ○ × ○ ○ ○ ○
NILFS ○ ○ ○ × ○ × × × × ○
ReiserFS ○ ○ × ○ ○ × ○[注釈 21] ○[注釈 21] ○ ×
Reiser4 ○ ○ × ○ ○ × × × × ×
XFS ○ ○ × ○ ○ × ○ ○[注釈 21] ○ ×
JFS ○ ○ ○ ○ ○ × ○ ○ ○ ×
VxFS ○ ○ ○ ○ ○ × ○ 不明 ○[注釈 21] ×
UDF ○ ○ ○ ○ ○ ○ ○ × ○ ×

機能

ハードリンク ソフトリンク ブロック・ジャーナリング または メタデータのみのジャーナリング 大文字/小文字区別 大文字/小文字保護 ファイル更新ログ インクリメンタル・スナップショット XIP
RT-11 × × × × × × × × ×
FAT12 × × × × × × × × ×
FAT16 × × × × × △ × × ×
FAT32 × × × × × △ × × ×
HPFS × × × × × ○ × 不明 ×
NTFS ○ △[注釈 22] × ○ ○[注釈 23] ○ ○ ○ 不明
ReFS × △ 不明 不明 ○ ○ 不明 不明 不明
HFS+ △ ○ × ○[注釈 24] △[注釈 25] ○ ○[注釈 26] × ×
UFS (FFS) ○ ○ × × ○ ○ × × ×
UFS (FFFS) ○ ○ × × ○ ○ × × ×
UFS2 ○ ○ × ×[注釈 27] ○ ○ × ○ 不明
ext2 ○ ○ × × ○ ○ × × ○[注釈 28]
ext3 ○ ○ ○[注釈 29] ○ ○ ○ × × 不明
ext4 ○ ○ ○[注釈 30] ○ ○ ○ × × 不明
NILFS ○ ○ ○[注釈 31] × ○ ○ × ○ 不明
ReiserFS ○ ○ ○[注釈 32] ○ ○ ○ × × 不明
Reiser4 ○ ○ ○ × ○ ○ × 不明 不明
XFS ○ ○ × ○ ○ ○ ○ ○ 不明
JFS ○ ○ × ○ ○[注釈 33] ○ × 不明 不明
ODS-2 ○ ○[注釈 34] × ○ × × ○ ○ ×
UDF ○ ○ ○[注釈 35] ○[注釈 35] ○ ○ × × ○
VxFS ○ ○ ○ × ○ ○ ○ ○[注釈 36] 不明
ZFS ○ ○ ○[注釈 37] ×[注釈 37] ○ ○ × ○ ×

アロケーションとレイアウト

Tail Packing 透過的圧縮 ブロックの分割割り当て 遅延アロケーション エクステント(英語版) 可変ファイルブロックサイズ[注釈 38]
FAT12 × ×[注釈 39] × × × ×
FAT16 × ×[注釈 39] × × × ×
FAT32 × ×[注釈 39] × × × ×
HPFS × × × × ○ ×
NTFS × ○ △ × ○ ×
ReFS 不明 × 不明 不明 不明 ×
HFS+ × × 不明 × ○ ×
UFS (FFS) × × ● 8:1[注釈 40] × × ×
UFS (FFFS) × × ● 8:1[注釈 40] × × ×
UFS2 × × ● 8:1[注釈 40] × × ○
ext2 × ×[注釈 41] ×[注釈 42] × × ×
ext3 × × ×[注釈 42] × × ×
ext4 × × ○ ○ ○ ×
NILFS × × × ○ × ×
ReiserFS ○ × × × × ×
Reiser4 ○ ×[注釈 43] × ○ ○[注釈 44] ×
XFS × × × ○ ○ ×
JFS × × ○ × ○ ×
VxFS × × 不明 × ○ ×
UDF × × × 不明[注釈 45] ○ ×
ZFS ×[注釈 46] ○ 不明 ○[注釈 47] × ○

脚注

注釈

  1. ↑ IBMは1990年にAIX 3.1 リリース時に JFS を導入。これは現在 JFS1 と呼ばれている。新たなJFS (JFS2などと呼ばれる) はLinux移植版がベースで、1999年にOS/2 Warp Server for e-Business で最初に出荷された。
  2. ↑ マイクロソフトはWindows 95 OSR2で最初に FAT32 を導入し、Windows 98で本格的に採用した。
  3. ↑ ディスク上のディレクトリ構造自体に制限がある。特にInstallable File System(英語版)のドライバはファイル名とディレクトリ名に制限がある。また、OSがファイルシステムの種類に寄らず全体に制限を加えていることもある。DOS、Microsoft Windows、OS/2は全ファイルシステムについて \\ / : ? * " > < | NUL といった文字をファイル名やディレクトリ名に使えない。UNIXおよびLinuxは全ファイルシステムについて / NUL という文字をファイル名やディレクトリ名に使えない。
  4. 1 2 3 ブロックサイズやクラスタサイズが可変なファイルシステムについては、ブロックサイズの最大と最小のときのボリュームサイズの範囲を示す。例えば、FATではディスク上のクラスタサイズが512 B – 128 KBである。しかし、Installable File System(英語版)の一部のドライバやOSによっては32 KBより大きいクラスタサイズをサポートしていない。
  5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 これらのファイルシステムでは、. と .. というディレクトリエントリ名は特別な意味を持つ。そのような名前のディレクトリエントリは禁じられておらず、むしろ普通のディレクトリエントリ名として存在している。しかし、これらはある意味で固定のエントリで固定の値を持ち、ディレクトリ生成時に自動的に生成される。これらのエントリがないディレクトリは壊れていると見なされる。
  6. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ディスク上の構造としては制限はないが、一部のInstallable File SystemのドライバやOSによっては制限している場合がある。DOSはFAT12やFAT16に関して260バイト以上のパス名をサポートしていない。Windows NTはNTFSに関して32767文字 (UTF-16) 以上のパス名をサポートしていない。POSIXの規定では「NULL終端で1024バイトを保証すること」とされているが、上限についての記述はない。
  7. 1 2 3 4 5 6 FAT12、FAT16、FAT32の実装が、長いファイル名 (LFN) をサポートしているかどうかに依存する。OS/2、DOS、Windows 95、Windows 98のDOSモードやLinuxの msdosドライバではLFNをサポートしていないので、ファイル名は8.3形式に制限される (制限を越えるとベース名も拡張子も空白で埋められる)。また、NUL (ディレクトリ終端マーカー) を含むこともできず、文字5 (削除済みファイルマーカーとして使われる文字229の代用) も含むことができない。短い名前では小文字も含まれない。
  8. ↑ FAT32のパーティションをこのサイズで作成して使用することは可能だが、ソフトウェアによっては 32 GiB以上のFAT32用パーティションを作成できない。有名なのは、Windows XPのインストールプログラムである (これはNTFSの利用を促すための意図的な制限であると思われる)。これを回避するには Windows Meの緊急用ブートディスクのFDISKを使う必要がある。
  9. ↑ Mac OSはHFS+のボリューム上のファイル名を扱う関数群を2種類用意している。ひとつは完全なUnicodeの名前を返し、もうひとつは従来互換を保つために31バイトまでの名前を返すものである。
  10. ↑ HFS+は任意のUnicode文字を許すためにエスケープシーケンスをサポートしている。古いソフトウェアからはそのエスケープシーケンスがそのまま見える。
  11. ↑ HFS+のボリュームサイズはほぼ無制限であるが、Mac OSには以下のような制限がある。Mac OS 8, 9:2 TiB。Mac OS X 10、10.1:2 TiB。Mac OS X 10.2:8 TiB。Mac OS X 10.3、10.4:16 TiB。ファイルサイズの最大はこれより若干小さい (Mac OS 8では2 GB)。フォルダ内の最大ファイル数 (フォルダ数) は以下の通り。 Mac OS 8, 9:2^15 (32767)。macOS:2^31。しかし、通常最大ボリュームサイズをブロックサイズで割った値で制限される。
  12. 1 2 これはディスク上の構造による制限である。Windows NT用NTFSドライバはボリュームサイズを256 TiB、ファイルサイズを16 TiB に制限している。
  13. ↑ ReiserFSの理論上の最大ファイルサイズは1 EiBだが、によれば、「ページキャッシュの制限により、32ビット int のアーキテクチャでは 8 TiB に制限される」
  14. ↑ この制限は新しい版では大きくなるかもしれない。
  15. 1 2 Linux 2.4 では XFS の最大ファイルサイズは 64 TiB だが、Linux 2.4 自体が最大 2 TiB までしかサポートしていない。IRIXにはこの制限はない。
  16. 1 2 一部のInstallable File SystemドライバやOSによってはFAT12やFAT16で拡張ファイル属性をサポートしていない。OS/2とWindows NTはFAT12/FAT16向けに拡張ファイル属性をサポートしている ("EA DATA. SF"擬似ファイルを使ってそのためにアロケートされたクラスタを予約している)。他のOSのファイルシステムドライバではサポートしていない。
  17. ↑ f-nodeにはユーザー識別子用フィールドがあるが、OS/2 Warp Server 以外では使われていない。
  18. ↑ NTFSのアクセス制御リストは単純なPOSIX式ファイルパーミッションで表せることは表現できるが、Services for UNIX や Cygwin を使わないとPOSIXのインターフェイスがサポートされない。
  19. 1 2 3 4 アクセス制御リストとMACラベルは拡張属性として実装される。
  20. ↑ FreeBSD 4.XなどのOSでは拡張属性をparallel backing fileを使って実装している。
  21. 1 2 3 4 5 6 7 8 一部のInstallable File SystemドライバやOSによっては、これらのファイルシステムについて拡張属性、ACL、セキュリティラベルをサポートしていない。2.6.x以前のLinuxはこれらをサポートしていないか、パッチが必要である。
  22. ↑ NTFS 5.0 以降では、junctions を生成でき、(個々のファイルではなく) ディレクトリ全体をローカルに管理するドライブのいずれかのディレクトリツリーにマップすることができる。これは reparse points と呼ばれる機能で実現されており、ファイル名解析部分を柔軟に拡張可能となっている。
  23. ↑ NTFS自体は大文字/小文字を区別するが、Windowsサブシステムは互換性を維持するため大文字/小文字の差異しかないファイル名を生成できないようになっている。新しいファイルを書き込みのためにオープンしたとき、大文字/小文字の差異を無視したときに同じ名前となるファイルが既に存在すると、その既存のファイルの内容が消されて書き込みに使われてしまう。Services for UNIXを使うと、完全な大文字/小文字の区別が行われる。
  24. ↑ メタデータのみのジャーナリングは、Max OS X v10.2.2 の HFS+ドライバから導入された。デフォルト値でジャーナリングが有効となったのはMac OS X v10.3以降である。
  25. ↑ 一般に大文字/小文字を区別していると思われがちであるが、HFS+は基本的には区別していない。単に大文字/小文字の違いを保護しているだけである。Mac OS X v10.3のコマンド newfs_hfs -s で大文字/小文字を区別するファイルシステムを作成できる。HFSXという別のファイルシステムは、HFS+を改良したもので、こちらは大文字/小文字を区別する。Technical Note TN1150: HFS Plus Volume FormatではHFS+とHFSXについて技術的詳細を論じている。
  26. ↑ Mac OS X v10.4とMac OS X v10.3はファイル変更ログを提供している (ファイルシステムソフトウェアの機能であり、ボリューム形式自体がサポートしているわけではない)。fsloggerを参照されたい。
  27. ↑ NetBSDの"Soft dependencies" (softdep) およびFreeBSDの"soft updates"はジャーナリングせずにメタデータの一貫性を常に保つ機能がある。
  28. ↑ Linux 2.6.12 以降。
  29. ↑ デフォルトでは無効になっている。
  30. ↑ デフォルトでは無効になっている。
  31. ↑ ログ構造化ファイルシステムであり,メタデータだけでなく全てのファイルデータの更新がインクリメンタルに記録される。
  32. ↑ ReiserFSの完全なブロック・ジャーナリングは Linux 2.6.8 で追加された。
  33. ↑ 一部のInstall File SystemドライバやOSによってはJFSでの大文字/小文字区別をサポートしていない。OS/2はサポートしておらず、Linux はマウント時のオプションで指定できる。
  34. ↑ "aliases"と呼ばれている。
  35. 1 2 UDFはログ構造ファイルシステムであり、ファイルシステム全体がジャーナルであるかのように振舞う。
  36. ↑ VxFSはオプションとして「ストレージ・チェックポイント」と呼ばれる機能を提供している。これは高機能のファイルシステム・スナップショット機能である。
  37. 1 2 ZFSはトランザクション・ファイルシステムであり、コピー・オン・ライト方式であるため、ジャーナルを使わなくてもディスク上の状態は常に正常である。しかし、同期書き込みを指定されたときなどの性能向上のため、ログを実装している。
  38. ↑ ここで言う可変ブロックサイズとは、ファイル毎にブロックサイズを変更できるシステムである。エクステント(英語版)と似ているが実装方針が微妙に異なる。UFS2の現状の実装はリードオンリーのみである。
  39. 1 2 3 DOS 6 の DoubleSpace や Windows 95およびWindows 98の DriveSpace は FAT におけるデータ圧縮機能だが、マイクロソフトが既にサポートしていない。
  40. 1 2 3 8:1以外の「ブロック:フラグメント」のサイズ比もサポートしているが、8:1が最も一般的で多くの実装で推奨されている。
  41. ↑ 1997年から利用可能なe2comprというパッチのセットでext2でのブロック単位のデータ圧縮が可能となる。しかし、これがLinuxカーネルのメインラインにマージされたことはない。
  42. 1 2 フラグメントは計画されていたが、ext2とext3に実装されたことはない。
  43. ↑ Reiser4はデータ圧縮を実装しているが、そのためのVFS APIが提供されていない。
  44. ↑ "extents"モードで実現。
  45. ↑ UDFの実装に依存する。
  46. ↑ ZFSの論理ブロックベースの圧縮を有効にすると、ファイルの最後尾ブロックに対してTail-Packingのように働く。
  47. ↑ コピーオンライトであるため、ZFSは全ての書き込みについて遅延アロケーションを行う。

出典

  1. ↑ "file operations can be performed on a logical file-system which may be local, structured data store or some remote service" fsspec

関連項目



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「Filesystem」の関連用語

Filesystemのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Filesystemのページの著作権

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
OSS iPediaOSS iPedia
Copyright © Information-technology Promotion Agency, Japan. All rights reserved 2006-2026
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2026 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【ファイルシステム】の記事を利用しております。
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのファイルシステム (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2026 GRAS Group, Inc.RSS