[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][パス操作] 指定したパス文字列から絶対パスを取得する

指定したパス文字列から絶対パスを取得するには、PathクラスGetFullPathメソッドを使用します。GetFullPathメソッドは、現在のディレクトリと現在のボリュームの情報を使用して絶対パス文字列を取得します。

下記は指定したパス文字列から絶対パスを取得する例です。

VBの例

Dim filepath As String = "Test.txt"

'フルパスを取得(現在のディレクトリがC:\WorkだとするとC:\Work\Test.txtを返す)
Console.WriteLine(System.IO.Path.GetFullPath(filepath))

C#の例

string filepath = @"Test.txt";

//フルパスを取得(現在のディレクトリがC:\WorkだとするとC:\Work\Test.txtを返す)
Console.WriteLine(System.IO.Path.GetFullPath(filepath));

[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("読み取り専用に設定しました");
}