DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

フォルダのタイムスタンプ(作成日時、更新日時、アクセス日時)を取得、設定する

Directoryクラスを使用する方法

フォルダ(ディレクトリ)のタイムスタンプ(作成日時、更新日時、アクセス日時)を取得するには、DirectoryクラスのGetCreationTime、GetLastWriteTime、GetLastAccessTimeメソッドを使います。また、設定は、SetCreationTime、SetLastWriteTime、SetLastAccessTimeメソッドを使います。

以下の例では、フォルダ"C:\TEST"のタイムスタンプを取得し、また、タイムスタンプを現在の時間に設定しています。

VB.NET
コードを隠すコードを選択
'作成日時の取得(DateTime値で返される)
'"C:\TEST"が存在しないときは、1601/01/01 9:00:00 を返す
Console.WriteLine(System.IO.Directory.GetCreationTime("C:\TEST"))
'更新日時の取得
Console.WriteLine(System.IO.Directory.GetLastWriteTime("C:\TEST"))
'アクセス日時の取得
Console.WriteLine(System.IO.Directory.GetLastAccessTime("C:\TEST"))

'作成日時の設定(現在の時間にする)
System.IO.Directory.SetCreationTime("C:\TEST", DateTime.Now)
'更新日時の設定
System.IO.Directory.SetLastWriteTime("C:\TEST", DateTime.Now)
'アクセス日時の設定
System.IO.Directory.SetLastAccessTime("C:\TEST", DateTime.Now)
C#
コードを隠すコードを選択
//作成日時の取得(DateTime値で返される)
//"C:\TEST"が存在しないときは、1601/01/01 9:00:00 を返す
Console.WriteLine(System.IO.Directory.GetCreationTime(@"C:\TEST"));
//更新日時の取得
Console.WriteLine(System.IO.Directory.GetLastWriteTime(@"C:\TEST"));
//アクセス日時の取得
Console.WriteLine(System.IO.Directory.GetLastAccessTime(@"C:\TEST"));

//作成日時の設定(現在の時間にする)
System.IO.Directory.SetCreationTime(@"C:\TEST", DateTime.Now);
//更新日時の設定
System.IO.Directory.SetLastWriteTime(@"C:\TEST", DateTime.Now);
//アクセス日時の設定
System.IO.Directory.SetLastAccessTime(@"C:\TEST", DateTime.Now);

上記のメソッドはすべてローカル時刻を使用したものになりますが、世界協定時刻を使いたい場合は、これらのメソッド名の末尾に"Utc"を付けたメソッドを使用します(.NET Framework 1.1以降)。

以上のDirectoryクラスのメソッドを表にまとめました。

Directoryのメソッド 説明 注意事項
GetCreationTime ディレクトリの作成日時を取得する
GetCreationTimeUtc 世界協定時刻(UTC)形式で、ディレクトリの作成日時を取得する .NET Framework 1.1以降。
GetLastAccessTime ディレクトリの最終アクセス日時を取得する
GetLastAccessTimeUtc 世界協定時刻(UTC)形式で、ディレクトリの最終アクセス日時を取得する .NET Framework 1.1以降。
GetLastWriteTime ディレクトリの最終更新日時を取得する
GetLastWriteTimeUtc 世界協定時刻(UTC)形式で、ディレクトリの最終更新日時を取得する .NET Framework 1.1以降。
SetCreationTime ディレクトリの作成日時を設定する
SetCreationTimeUtc 世界協定時刻(UTC)形式で、ディレクトリの作成日時を設定する .NET Framework 1.1以降。
SetLastAccessTime ディレクトリの最終アクセス日時を設定する
SetLastAccessTimeUtc 世界協定時刻(UTC)形式で、ディレクトリの最終アクセス日時を設定する .NET Framework 1.1以降。
SetLastWriteTime ディレクトリの最終更新日時を設定する
SetLastWriteTimeUtc 世界協定時刻(UTC)形式で、ディレクトリの最終更新日時を設定する .NET Framework 1.1以降。

DirectoryInfoクラスを使用する方法

DirectoryInfoクラスを使用する場合は、CreationTime、LastWriteTime、LastAccessTimeを使用します。なおこれらのプロパティにも世界協定時刻版として、末尾に"Utc"が付いたプロパティが存在します(.NET Framework 1.1以降)。

DirectoryInfoクラスは、フォルダ情報を返すプロパティ(Attributes、LastWriteTimeなど)が最初に呼び出されたときにキャッシュを作成し、2回目以降の呼び出しではキャッシュされた情報を返すため、最新の情報を取得するためには、その前にRefreshメソッドを呼び出してキャッシュを最新にしておく必要があります。

以下の例では、フォルダ"C:\TEST"のタイムスタンプを取得し、また、タイムスタンプを現在の時間に設定しています。

VB.NET
コードを隠すコードを選択
'DirectoryInfoオブジェクトを作成する
Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("C:\TEST")

'作成日時の取得(DateTime値で返される)
Console.WriteLine(di.CreationTime)
'更新日時の取得
Console.WriteLine(di.LastWriteTime)
'アクセス日時の取得
Console.WriteLine(di.LastAccessTime)

'作成日時の設定(現在の時間にする)
di.CreationTime = DateTime.Now
'更新日時の設定
di.LastWriteTime = DateTime.Now
'アクセス日時の設定
di.LastAccessTime = DateTime.Now
C#
コードを隠すコードを選択
//DirectoryInfoオブジェクトを作成する
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"C:\TEST");

//作成日時の取得(DateTime値で返される)
Console.WriteLine(di.CreationTime);
//更新日時の取得
Console.WriteLine(di.LastWriteTime);
//アクセス日時の取得
Console.WriteLine(di.LastAccessTime);

//作成日時の設定(現在の時間にする)
di.CreationTime = DateTime.Now;
//更新日時の設定
di.LastWriteTime = DateTime.Now;
//アクセス日時の設定
di.LastAccessTime = DateTime.Now;

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。