[Tips][SaveFileDialog] ダイアログの表示と入力されたファイル名の取得

SaveFileFialogは、保存するファイル名を指定できるダイアログです。

このダイアログを表示するにはShowDialogメソッドを使用します。

ShowDialogメソッドは、ユーザーがファイル名を入力して[保存]ボタンを押すとWindows.Forms.DialogResult.OKを返します。

また[保存]ボタンが押されるとFileOkイベントが発生しますので、通常はこのイベントを利用するのが良いでしょう。

ユーザーが入力したファイル名はFileNameプロパティで取得することができます。

実際にはFileNameプロパティは、入力されたファイルのフルパスが格納されるため、ファイル名のみを取り出すにはPathクラスGetFileNameメソッドを利用するなどの工夫が必要です。

下記はSaveFileDialogを表示し入力されたファイル名を取得する例です。

サンプルの画面は下記のようにデザインしました。

VBの例

' [ファイルの保存]ボタンクリック時の処理
Private Sub btnShowSaveDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowSaveDialog.Click
    '★★★ファイル保存ダイアログの表示★★★
    SaveFileDialog1.ShowDialog()
End Sub

' [保存]ボタンが押されたときの処理
Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    Dim strFileName As String

    '★★★入力されたファイル名を取得★★★
    strFileName = IO.Path.GetFileName(SaveFileDialog1.FileName)

    'ファイル名をテキストボックスに表示
    txtInputFile.Text = strFileName
End Sub

C#の例

' [ファイルの保存]ボタンクリック時の処理
Private Sub btnShowSaveDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowSaveDialog.Click
    '★★★ファイル保存ダイアログの表示★★★
    SaveFileDialog1.ShowDialog()
End Sub

' [保存]ボタンが押されたときの処理
Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    Dim strFileName As String

    '★★★入力されたファイル名を取得★★★
    strFileName = IO.Path.GetFileName(SaveFileDialog1.FileName)

    'ファイル名をテキストボックスに表示
    txtInputFile.Text = strFileName
End Sub

実行例は下図の通りです。

[Tips][ファイル操作] ファイルの拡張子を調べる

ファイルの拡張子を調べるには、FileInfoクラスExtensionプロパティを参照します。

下記は、ファイルの拡張子を調べる例です。

VBの例

Dim targetFile As String = "C:\Work\icons.zip"   '対象ファイル
Dim info As New IO.FileInfo(targetFile)

MessageBox.Show("拡張子は" & info.Extension & "です")

C#の例

string targetFile = @"C:\Work\icons.zip";   // 対象ファイル
System.IO.FileInfo info = new System.IO.FileInfo(targetFile);

MessageBox.Show("拡張子は" + info.Extension + "です");

[Tips][ファイル操作] ファイルサイズを取得する

ファイルサイズを取得するにはFileInfoクラスLengthプロパティを参照します。

ファイルサイズの単位はバイトで返されますので、必要に応じて各自で変換する必要があります。

下記は、指定したファイルのサイズを取得し単位をMBにして表示します。

VBの例

Dim targetFile As String = "C:\Work\icons.zip"   '対象ファイル
Dim info As New IO.FileInfo(targetFile)
Dim strFileSize As String = Format((info.Length / 1024 / 1024), "#.#0")

MessageBox.Show("ファイルサイズは" & strFileSize & "MBです")

C#の例

string targetFile = @"C:\Work\icons.zip";   // 対象ファイル
System.IO.FileInfo info = new System.IO.FileInfo(targetFile);
var fileSize = info.Length / 1024f / 1024f;
string strFileSize = fileSize.ToString("#.#0");

MessageBox.Show("ファイルサイズは" + strFileSize + "MBです");

[Tips][ファイル操作] ファイル属性を設定する

ファイルやディレクトリに属性を設定するには、FileクラスSetAttributesメソッドを使用します。

SetAttributesメソッドを使用する場合は、第1引数には属性を設定したいファイルやディレクトリのパスを、第2引数には属性(FileAttributes列挙体)を指定します。FileAttributes列挙体については前回の記事を参照ください。

下記は指定したファイルが指定したファイルを読み取り専用にする例です。

VBの例


Dim targetFile As String = "C:\Work\Test.txt"   '対象ファイル
Dim attr As IO.FileAttributes

'現在の属性を取得する
attr = IO.File.GetAttributes(targetFile)

If (attr And IO.FileAttributes.ReadOnly) = IO.FileAttributes.ReadOnly Then
    MessageBox.Show("このファイルは既に読み取り専用ファイルです")
Else
    Dim newAttr As FileAttribute
    '現在の属性に読み取り専用属性をプラスする
    newAttr = attr Or IO.FileAttributes.ReadOnly
    IO.File.SetAttributes(targetFile, newAttr)

    MessageBox.Show("読み取り専用に設定しました")
End If

C#の例

string targetFile = @"C:\Work\Test.txt";    // 対象ファイル
System.IO.FileAttributes attr;

// 現在の属性を取得する
attr = System.IO.File.GetAttributes(targetFile);

if ((attr & System.IO.FileAttributes.ReadOnly) ==
    System.IO.FileAttributes.ReadOnly)
    MessageBox.Show("このファイルは既に読み取り専用ファイルです");
else
{
    System.IO.FileAttributes newAttr;

    // 現在の属性に読み取り専用属性をプラスする
    newAttr = attr | System.IO.FileAttributes.ReadOnly;
    System.IO.File.SetAttributes(targetFile, newAttr);

    MessageBox.Show("読み取り専用に設定しました");
}

[Tips][ファイル操作] ファイル属性を取得する

ファイルの属性を取得するには、FileクラスGetAttributesメソッドを使用します。

GetAttributesの引数には、属性を調べたいファイルのパスを指定します。このメソッドはFileクラスのメンバですがディレクトリの属性も調べることができます。

GetAttributesメソッドの戻り値は、FileAttributes型となっており、特定のビットに属性情報がセットされます。

したがって、どのような属性を持っているかを調べるには、GetAttributesメソッドの戻り値とFileAttributes列挙体(下記)の値でビット演算を行う必要があります。

FileAttributes列挙体
メンバ名 説明
ReadOnly 読み取り専用
Hidden 隠し属性
System システムファイル
Directory ディレクトリ
Archive アーカイブ
Device 今後使用するために予約されている
Normal 標準のファイル
temporary 一時ファイル
SparseFile スパースファイル
ReparsePoint リパースポイントが含まれている
Compressed 圧縮ファイル
Offline ファイルはオフラインである
NotContentIndex インデックス付けサービスによるインデックスが付いていない
Encrypted ファイルまたはディレクトリは暗号化されている

下記は、指定したファイルが読み取り専用かどうかを調べる例です。

VBの例

<br />Dim targetFile As String = "C:\Work\Test.txt"   '対象ファイル<br />Dim attr As IO.FileAttributes<br /><br />'属性を取得する<br />attr = IO.File.GetAttributes(targetFile)<br /><br />If (attr And IO.FileAttributes.ReadOnly) = IO.FileAttributes.ReadOnly Then<br />    MessageBox.Show("読み取り専用ファイルです")<br />Else<br />    MessageBox.Show("読み取り専用ファイルではありません")<br />End If<br />

C#の例

<br />string targetFile = @"C:\Work\Test.txt";    // 対象ファイル<br />System.IO.FileAttributes attr;<br /><br />// 属性を取得する<br />attr = System.IO.File.GetAttributes(targetFile);<br /><br />if ((attr &amp; System.IO.FileAttributes.ReadOnly) ==<br />    System.IO.FileAttributes.ReadOnly)<br />    MessageBox.Show("読み取り専用ファイルです");<br />else<br />    MessageBox.Show("読み取り専用ファイルではありません");<br />