方法: OpenFileDialog を使用してファイルを開く
ファイルを閲覧したり、選択したりするための Windows ダイアログ ボックスは System.Windows.Forms.OpenFileDialog コンポーネントによって開きます。 選択したファイルを開いて読むには、OpenFileDialog.OpenFile メソッドを使用できます。あるいは、System.IO.StreamReader クラスのインスタンスを作成できます。 次の例からは両方の手法を確認できます。
.NET Framework では、FileName プロパティを取得し、設定するには、System.Security.Permissions.FileIOPermission クラスから付与される特権レベルが必要です。 ここの例では FileIOPermission アクセス許可が確認されます。部分的にしか信頼されないコンテキストで実行される場合、特権が不十分であれば、例外がスローされることがあります。 詳しくは、「コード アクセス セキュリティの基礎」をご覧ください。
これらの例は、C# または Visual Basic コマンド ラインから .NET Framework アプリとして構築し、実行できます。 詳細については、csc.exe を使用したコマンド ラインからのビルドに関する記事、または「コマンド ラインからのビルド」を参照してください。
.NET Core 3.0 以降では、.NET Core Windows フォームの <folder name>.csproj プロジェクト ファイルが含まれるフォルダーから、Windows .NET Core アプリとして例を構築し、実行することもできます。
例: StreamReader でファイルをストリームとして読み込む
次の例では、Windows フォーム Button コントロールの Click イベント ハンドラーを使用し、ShowDialog メソッドで OpenFileDialog を開きます。 ユーザーがファイルを選択し、 [OK] をクリックすると、StreamReader クラスのインスタンスによってファイルが読み込まれ、その内容がフォームのテキスト ボックスに表示されます。 ファイル ストリームからの読み込みに関する詳細については、「FileStream.BeginRead」と「FileStream.Read」を参照してください。
using System;
using System.Drawing;
using System.IO;
using System.Security;
using System.Windows.Forms;
public class OpenFileDialogForm : Form
{
[STAThread]
public static void Main()
{
Application.SetCompatibleTextRenderingDefault(false);
Application.EnableVisualStyles();
Application.Run(new OpenFileDialogForm());
}
private Button selectButton;
private OpenFileDialog openFileDialog1;
private TextBox textBox1;
public OpenFileDialogForm()
{
openFileDialog1 = new OpenFileDialog();
selectButton = new Button
{
Size = new Size(100, 20),
Location = new Point(15, 15),
Text = "Select file"
};
selectButton.Click += new EventHandler(SelectButton_Click);
textBox1 = new TextBox
{
Size = new Size(300, 300),
Location = new Point(15, 40),
Multiline = true,
ScrollBars = ScrollBars.Vertical
};
ClientSize = new Size(330, 360);
Controls.Add(selectButton);
Controls.Add(textBox1);
}
private void SetText(string text)
{
textBox1.Text = text;
}
private void SelectButton_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
var sr = new StreamReader(openFileDialog1.FileName);
SetText(sr.ReadToEnd());
}
catch (SecurityException ex)
{
MessageBox.Show($"Security error.\n\nError message: {ex.Message}\n\n" +
$"Details:\n\n{ex.StackTrace}");
}
}
}
}
Imports System.Drawing
Imports System.IO
Imports System.Security
Imports System.Windows.Forms
Public Class OpenFileDialogForm : Inherits Form
Public Shared Sub Main()
Application.SetCompatibleTextRenderingDefault(False)
Application.EnableVisualStyles()
Dim frm As New OpenFileDialogForm()
Application.Run(frm)
End Sub
Dim WithEvents SelectButton As Button
Dim openFileDialog1 As OpenFileDialog
Dim TextBox1 As TextBox
Private Sub New()
ClientSize = New Size(400, 400)
openFileDialog1 = New OpenFileDialog()
SelectButton = New Button()
With SelectButton
.Text = "Select file"
.Location = New Point(15, 15)
.Size = New Size(100, 25)
End With
TextBox1 = New TextBox()
With TextBox1
.Size = New Size(300, 300)
.Location = New Point(15, 50)
.Multiline = True
.ScrollBars = ScrollBars.Vertical
End With
Controls.Add(SelectButton)
Controls.Add(TextBox1)
End Sub
Private Sub SetText(text)
TextBox1.Text = text
End Sub
Public Sub SelectButton_Click(sender As Object, e As EventArgs) _
Handles SelectButton.Click
If openFileDialog1.ShowDialog() = DialogResult.OK Then
Try
Dim sr As New StreamReader(openFileDialog1.FileName)
SetText(sr.ReadToEnd())
Catch SecEx As SecurityException
MessageBox.Show($"Security error:{vbCrLf}{vbCrLf}{SecEx.Message}{vbCrLf}{vbCrLf}" &
$"Details:{vbCrLf}{vbCrLf}{SecEx.StackTrace}")
End Try
End If
End Sub
End Class
例: フィルター処理された選択から OpenFile を使用してファイルを開く
次の例では、Button コントロールの Click イベント ハンドラーを使用し、テキスト ファイルのみを表示するフィルターを付けて OpenFileDialog を開きます。 ユーザーがテキスト ファイルを選択し、 [OK] を選択すると、OpenFile メソッドが使用され、ファイルがメモ帳で開きます。
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Security;
using System.Windows.Forms;
public class OpenFileDialogForm : Form
{
[STAThread]
public static void Main()
{
Application.SetCompatibleTextRenderingDefault(false);
Application.EnableVisualStyles();
Application.Run(new OpenFileDialogForm());
}
private Button selectButton;
private OpenFileDialog openFileDialog1;
public OpenFileDialogForm()
{
openFileDialog1 = new OpenFileDialog()
{
FileName = "Select a text file",
Filter = "Text files (*.txt)|*.txt",
Title = "Open text file"
};
selectButton = new Button()
{
Size = new Size(100, 20),
Location = new Point(15, 15),
Text = "Select file"
};
selectButton.Click += new EventHandler(selectButton_Click);
Controls.Add(selectButton);
}
private void selectButton_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
var filePath = openFileDialog1.FileName;
using (Stream str = openFileDialog1.OpenFile())
{
Process.Start("notepad.exe", filePath);
}
}
catch (SecurityException ex)
{
MessageBox.Show($"Security error.\n\nError message: {ex.Message}\n\n" +
$"Details:\n\n{ex.StackTrace}");
}
}
}
}
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.IO
Imports System.Security
Imports System.Windows.Forms
Public Class OpenFileDialogForm : Inherits Form
Dim WithEvents selectButton As Button
Dim openFileDialog1 As OpenFileDialog
Public Shared Sub Main()
Application.SetCompatibleTextRenderingDefault(false)
Application.EnableVisualStyles()
Dim frm As New OpenFileDialogForm()
Application.Run(frm)
End Sub
Private Sub New()
openFileDialog1 = New OpenFileDialog() With
{
.FileName = "Select a text file",
.Filter = "Text files (*.txt)|*.txt",
.Title = "Open text file"
}
selectButton = New Button() With {.Text = "Select file"}
Controls.Add(selectButton)
End Sub
Public Sub selectButton_Click(sender As Object, e As EventArgs) _
Handles selectButton.Click
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
Try
Dim filePath = OpenFileDialog1.FileName
Using str = openFileDialog1.OpenFile()
Process.Start("notepad.exe", filePath)
End Using
Catch SecEx As SecurityException
MessageBox.Show($"Security error:{vbCrLf}{vbCrLf}{SecEx.Message}{vbCrLf}{vbCrLf}" &
$"Details:{vbCrLf}{vbCrLf}{SecEx.StackTrace}")
End Try
End If
End Sub
End Class
関連項目
.NET Desktop feedback