|











|
 |
ファイルとディレクトリの操作
|
開発環境: Visual Studio 2003
目次
|
- ディレクトリ情報の取得
- 作成日時を知りたい。
- 更新日時を知りたい。
- アクセス日時を知りたい。
- 名前を知りたい。
- 拡張子を知りたい。
- フルパス名を知りたい。
- 親ディレクトリを知りたい。
- ルートディレクトリを知りたい。
-
アーカイブ、圧縮、ディレクトリ、非表示、オフライン、読み取り専用、システム、一時ファイルのアトリビュートを知りたい。
- ディレクトリの操作
- ディレクトリを作成したい。
- サブディレクトリを作成したい。
- ディレクトリを移動したい。
- ディレクトリの削除
- 指定したディレクトリ以下をすべて削除
- ファイル情報の取得
- 作成日時を知りたい。
- 更新日時を知りたい。
- アクセス日時を知りたい。
- 名前を知りたい。
- 拡張子を知りたい。
- フルパス名を知りたい。
- ディレクトリ情報を知りたい。
- ディレクトリ名を知りたい。
- ファイルサイズを知りたい。
- システムの固定フォルダへのパスの取得
- ローミングユーザのアプリケーション固有データのためのディレクトリ
-
すべてのユーザーが使用するアプリケーション固有のデータのためのディレクトリ
- アプリケーション間で共有されるコンポーネント用のディレクトリ
- クッキー用のディレクトリ
- デスクトップのディレクトリ
- インターネットのお気に入りのディレクトリ
- インターネットの履歴項目のディレクトリ
- 一時インターネット ファイルのディレクトリ
- 非ローミングユーザーが使用するアプリケーション固有のディレクトリ
- ドキュメントの共通リポジトリのディレクトリ
- プログラムファイルのディレクトリ
- プログラム グループを格納するディレクトリ
- 最近使用したドキュメントを格納するディレクトリ
- "送る"メニューのディレクトリ
- "スタート"メニューのディレクトリ
- "スタートアップ"のディレクトリ
- システムディレクトリ
- ドキュメントテンプレートのディレクトリ
- FileInfo を使った ファイルのアクセス
- バイナリーファイルのアクセス
- テキストファイルのアクセス
- ファイルのオープンモード
- ファイルに追加で書き込みたい。
-
新しいファイルを作成したい。すでに存在する場合は、頭から上書きしたい。
- 新しいファイルを作成したい。すでに存在する場合は、エラーにしたい。
- ファイルをオープンしたい。存在しない場合は、エラーにしたい。
-
ファイルをオープンしたい。存在しない場合は新しいファイルを作成したい。
- ファイルをオープンしたい。開いた後にサイズが 0
バイトになるようにしたい。
- ファイルアクセス
- ファイルの読取りアクセス
- ファイルへの読取り/書込みアクセス
- ファイルへの書込みアクセス
- ファイルの共有
- 子プロセスで継承できるようにしたい。
- 現在のファイルの共有を解除したい。
- 読取りを許可にしたい。
- 読取り、書込みを許可にしたい。
- 書込みを許可にしたい。
- StreamReader / StreamWriter
を使ったテキストファイルのリードライト
- テキストファイルのリード
- テキストファイルのライト
- ドライブ情報の取得
|
|
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.CreationTime; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.LastWriteTime; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.LastAccessTime; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.Name; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.Extension; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.FullName; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.Parent; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.Root; |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.Attributes |
|
|
| dirInfo = new DirectoryInfo(@".\test"); if ( dirInfo.Exists == false ) { dirInfo.Create(); }
注意1: ディレクトリが存在する場合には、IOException、パーミッションがない場合には
SecurityExceptionが上がる。 |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.CreateSubdirectory("SubDir"); |
|
| System,IO.DirectoryInfo dirInfo = new
System.IO.DirectoryInfo(@"path"); dirInfo.MoveTo("DestinationDir");
注意1: ディレクトリが存在する場合には、IOException、パーミッションがない場合には
SecurityExceptionが上がる。 |
|
| dirInfo = new DirectoryInfo(@".\test"); dirInfo.Delete( false );
注意1: ディレクトリが空ではないのに、Delete( false )
により削除しようとすると、次の例外が発生する。 パーミッションがない場合には SecurityExceptionが上がる。 |
|
| dirInfo = new DirectoryInfo(@".\test"); dirInfo.Delete( true ); |
|
|
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.CreationTime; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.LastWriteTime; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.LastAccessTime; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.Name; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.Extension; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.FullName; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); DirectoryInfo dirInfo = fileInfo.Directory; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.DirectoryName; |
|
| System,IO.FileInfo dirInfo = new
System.IO.FileInfo(@"path"); fileInfo.Length; |
|
|
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.Cookies); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.History); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.InternetCache); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.Personal); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.Programs); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder,Recent); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.SendTo); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.Startup); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.System); |
|
| System.Environment.GetFolderPath(Environment.SpecialFolder.Templates); |
|
|
|
| FileInfo fileInfo = new FileInfo("test.dat"); FileStream fs = fileInfo.Open( FileMode, [ FileAccess ] , [ FileShare ] ); byte []data = {1,2,3,4,5,6}; fs.Write(data, 0, data.Length); fs.Close();
FileMode, FileAccess, FileShare はそれぞれ次のとおり。 |
|
| FileInfo fileInfo3 = new FileInfo(@"..\..\Class1.cs"); StreamReader sr1 = fileInfo3.OpenText(); StreamReader srSJIS = new StreamReader(sr.BaseStream,
System.Text.Encoding.GetEncoding("sjis")); while ( str != null ) { str = srSJIS.ReadLine(); Console.WriteLine( str ); } srSJIS.Close(); sr.Close();
注意: ファイルのオープンモード、ファイルアクセスの設定、ファイル共有の設定の必要がなければ、FileInfo から OpenText()
でStreamReader を得るより、直接 StreamReader、StreamWriter を使う方法が楽チン。 |
|
|
|
| FileStream = FileInfo.Open ( FileMode.Append, ...) |
|
| FileStream = FileInfo.Open ( FileMode.Create, ...) |
|
| FileStream = FileInfo.Open ( FileMode.CreateNew, ...) |
|
| FileStream = FileInfo.Open ( FileMode.Open, ...) |
|
| FileStream = FileInfo.Open ( FileMode.OpenOrCreate,
...) |
|
| FileStream = FileInfo.Open ( FileMode.Truncate, ...) |
|
|
|
| FileStream = FileInfo.Open ( ..., FileAccess.Read ) |
|
| FileStream = FileInfo.Open ( ..., FileAccess.ReadWrite
) |
|
| FileStream = FileInfo.Open ( ..., FileAccess.Write ) |
|
|
|
| FileStream = FileInfo.Open ( ..., ...,
FileShare.Inheritable ) |
|
| FileStream = FileInfo.Open ( ..., ..., FileShare.None ) |
|
| FileStream = FileInfo.Open ( ..., ..., FileShare.Read ) |
|
| FileStream = FileInfo.Open ( ..., ...,
FileShare.ReadWrite ) |
|
| FileStream = FileInfo.Open ( ..., ..., FileShare.Write
) |
|
|
|
| FileInfo
を使わずとも、テキストファイルを読み込むだけであれば、StreamReader(ファイル名)で直接ストリームリーダを作ることができる。 この方法が楽。 ただし、エンコーディングを設定しないと、SJIS ファイルが正しく読めません。
System.IO.StreamReader streamReader = new System.IO.StreamReader(filename,
System.Text.Encoding.GetEncoding("sjis")); string str = streamReader.ReadToEnd(); streamReader.Close();
サンプルコードはこちら。 |
|
| FileInfo
を使わずとも、テキストファイルを書くだけであれば、StreamWriter(ファイル名)で直接ストリームライターを作ることができる。 この方法が楽。 ただし、エンコーディングを設定しないと、正しく書けません。
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(filename,
false, System.Text.Encoding.GetEncoding("sjis")); streamWriter.Write("書き出す文字列");
streamWriter.Close();
サンプルコードはこちら。 |
|
|
ドライブ情報の取得について、 System.Management 名前空間を使って、 WMI (Windows Management Instrumentation)
に実装されているシステム、デバイス、アプリケーションに関する管理情報へアクセスできます。
いつきさんより教えていただきました。 感謝!
| using System.Management; // 参照の追加が必要です。 ... ManagementObject disk = new
ManagementObject("win32_logicaldisk.deviceid=\"c:\""); disk.Get();
Console.WriteLine("Description = " + disk["Description"]); Console.WriteLine("DeviceID = " + disk["DeviceID"]); Console.WriteLine("DriveType = " + disk["DriveType"]); Console.WriteLine("FileSystem = " + disk["FileSystem"]); Console.WriteLine("FreeSpace = " + disk["FreeSpace"]); Console.WriteLine("MaximumComponentLength = " +
disk["MaximumComponentLength"]); Console.WriteLine("MediaType = " + disk["MediaType"]); Console.WriteLine("Name = " + disk["Name"]); Console.WriteLine("Size = " + disk["Size"]); Console.WriteLine("SystemName = " + disk["SystemName"]); Console.WriteLine("VolumeName = " + disk["VolumeName"]); Console.WriteLine("VolumeSerialNumber = " + disk["VolumeSerialNumber"]);
|
実行結果
Description = ローカル固定ディスク DeviceID = c: DriveType = 3 FileSystem = NTFS FreeSpace = 2482167808 MaximumComponentLength = 255 MediaType = 12 Name = c: Size = 13012357120 SystemName = UCHUKAMEN VolumeName = 13GB VolumeSerialNumber = 00FE0005 |
FileInfo, DirectoryInfo 関連のサンプルコード
using System;
using System.IO;
namespace File
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
// System.Environment.GetFolderPath
TestSystemSpecificPath();
// System.IO.DirectoryInfo
TestDirectoryInfo();
// System.IO.FileInfo
TestFileInfo();
Console.ReadLine();
}
private static void TestSystemSpecificPath()
{
//
// ----------------- システムの固定フォルダへのパス ---------------
//
Console.WriteLine("\n--------- システムの固定フォルダへのパス --------");
// ローミングユーザのアプリケーション固有データのためのディレクトリ
Console.WriteLine("ApplicationData:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
// すべてのユーザーが使用するアプリケーション固有のデータのためのディレクトリ
Console.WriteLine("CommonApplicationData:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
// アプリケーション間で共有されるコンポーネント用のディレクトリ
Console.WriteLine("CommonProgramFiles:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles));
// クッキー用のディレクトリ
Console.WriteLine("Cookies:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.Cookies));
// デスクトップのディレクトリ
Console.WriteLine("DesktopDirectory:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
// インターネットのお気に入りのディレクトリ
Console.WriteLine("Favorites:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites));
// インターネットの履歴項目のディレクトリ
Console.WriteLine("History:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.History));
// 一時インターネット ファイルのディレクトリ
Console.WriteLine("InternetCache:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.InternetCache));
// 非ローミングユーザーが使用するアプリケーション固有のディレクトリ
Console.WriteLine("LocalApplicationData:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
// ドキュメントの共通リポジトリのディレクトリ
Console.WriteLine("Personal:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.Personal));
// プログラムファイルのディレクトリ
Console.WriteLine("ProgramFiles:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));
// 最近使用したドキュメントを格納するディレクトリ
Console.WriteLine("Recent:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.Recent));
// "送る"メニューのディレクトリ
Console.WriteLine("SendTo:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.SendTo));
// "スタート"メニューのディレクトリ
Console.WriteLine("StartMenu:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu));
// スタートアップのディレクトリ
Console.WriteLine("Startup:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.Startup));
// システムディレクトリ
Console.WriteLine("System:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.System));
// ドキュメントテンプレートのディレクトリ
Console.WriteLine("Templates:\t{0}", System.Environment.GetFolderPath(Environment.SpecialFolder.Templates));
}
private static void TestDirectoryInfo()
{
//
// ---------------- DirectoryInfo -------------
//
DirectoryInfo dirInfo = new DirectoryInfo(@"..\..");
// 作成日時の取得
Console.WriteLine("CreationTime:\t{0}", dirInfo.CreationTime);
// 存在するかどうか ( bool ) の取得
Console.WriteLine("Exists:\t{0}", dirInfo.Exists);
// ファイルエクステンションの取得
Console.WriteLine("Extension:\t{0}", dirInfo.Extension);
// フルパス名の取得
Console.WriteLine("FullName:\t{0}", dirInfo.FullName);
// アクセス日時の取得
Console.WriteLine("LastAccessTime:\t{0}", dirInfo.LastAccessTime);
// 更新日時の取得
Console.WriteLine("LastWriteTime:\t{0}", dirInfo.LastWriteTime);
// 名前の取得
Console.WriteLine("Name:\t{0}", dirInfo.Name);
// 親ディレクトリの取得
Console.WriteLine("Parent:\t{0}", dirInfo.Parent);
// ルートディレクトリの取得
Console.WriteLine("Root:\t{0}", dirInfo.Root);
// 指定ファイルのアトリビュートの取得
Console.WriteLine("Attributes:\t{0}", dirInfo.Attributes);
// 指定ディレクトリに存在するディレクトリ情報の取得
Console.WriteLine("\n指定ディレクトリに存在するディレクトリ情報の取得");
DirectoryInfo [] dirInfos = dirInfo.GetDirectories();
foreach (DirectoryInfo dInfo in dirInfos)
{
Console.WriteLine("Directories:\t{0}", dInfo.Name);
}
// 指定ディレクトリのファイル情報の取得
Console.WriteLine("\n指定ディレクトリのファイル情報の取得");
FileInfo [] fileInfos = dirInfo.GetFiles();
foreach (FileInfo fInfo in fileInfos)
{
Console.WriteLine("Files:\t{0}", fInfo);
}
// ディレクトリの作成
dirInfo = new DirectoryInfo(@".\test");
Console.WriteLine("{0}を作成します。", dirInfo.Name);
if ( dirInfo.Exists == false )
{
dirInfo.Create();
Console.WriteLine("Exists:\t{0}", dirInfo.Exists);
}
// ディレクトリの移動
// 移動する前に、ディレクトリが存在すれば削除します。
DirectoryInfo dirInfo2 = new DirectoryInfo(@".\test2");
if ( dirInfo2.Exists == true )
{
dirInfo2.Delete( false );
}
dirInfo = new DirectoryInfo(@".\test");
Console.WriteLine("{0}をMoveTo( ファイル名 )で移動します。", dirInfo.Name);
dirInfo.MoveTo(@".\test2");
// ディレクトリの作成
dirInfo = new DirectoryInfo(@".\test");
Console.WriteLine("{0}を作成します。", dirInfo.Name);
if ( dirInfo.Exists == false )
{
dirInfo.Create();
Console.WriteLine("Exists:\t{0}", dirInfo.Exists);
}
// ディレクトリの削除
try
{
// サブディレクトリを作成する。
Console.WriteLine("サブディレクトリを作成します。");
dirInfo.CreateSubdirectory("SubDir");
// ディレクトリが空ではないのに、Delete( false ) により削除しようとすると
// System.IO.IOException例外が発生する。
Console.WriteLine("{0}をDelete( false )で削除します。", dirInfo.Name);
dirInfo.Delete( false );
}
catch (System.IO.IOException e)
{
Console.WriteLine("{0}, {1}", e.ToString(), e.Message);
}
dirInfo = new DirectoryInfo(@".\test");
// Delete ( true ) により、そのサブディレクトリ、およびすべてのファイルを削除する。
// 慎重な取り扱いが必要
Console.WriteLine("{0}をDelete( true )で削除します。", dirInfo.Name);
dirInfo.Delete( true );
}
private static void TestFileInfo()
{
//
// ----------------- FileInfo -----------------------------------
//
FileInfo fileInfo = new FileInfo(@"..\..\Class1.cs");
// 作成日時の取得
Console.WriteLine("\nCreationTime:\t{0}", fileInfo.CreationTime);
// 存在するかどうか ( bool ) の取得
Console.WriteLine("Exists:\t{0}", fileInfo.Exists);
// ファイルエクステンションの取得
Console.WriteLine("Extension:\t{0}", fileInfo.Extension);
// フルパス名の取得
Console.WriteLine("FullName:\t{0}", fileInfo.FullName);
// アクセス日時の取得
Console.WriteLine("LastAccessTime:\t{0}", fileInfo.LastAccessTime);
// 更新日時の取得
Console.WriteLine("LastWriteTime:\t{0}", fileInfo.LastWriteTime);
// 名前の取得
Console.WriteLine("Name:\t{0}", fileInfo.Name);
// 指定ファイルのアトリビュートの取得
Console.WriteLine("Attributes:\t{0}", fileInfo.Attributes);
// ディレクトリの取得
Console.WriteLine("Directory:\t{0}", fileInfo.Directory);
// ディレクトリ名の取得
Console.WriteLine("DirectoryName:\t{0}", fileInfo.DirectoryName);
// ファイルサイズの取得
Console.WriteLine("Length:\t{0}", fileInfo.Length);
// Binary Open
FileInfo fileInfo2 = new FileInfo(@"test.dat");
FileStream fs = fileInfo2.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
byte []data = {0x41,0x42,0x43,0x44,0x45,0x46};
fs.Write(data, 0, data.Length);
fs.Close();
// Text Open
FileInfo fileInfo3 = new FileInfo(@"..\..\Class1.cs");
StreamReader sr = fileInfo3.OpenText();
StreamReader srSJIS = new StreamReader(sr.BaseStream, System.Text.Encoding.GetEncoding("sjis"));
string str = "";
while ( str != null )
{
str = srSJIS.ReadLine();
Console.WriteLine( str );
}
srSJIS.Close();
sr.Close();
}
}
}
|