Sdílet prostřednictvím


Postupy: Otevírání souborů pomocí OpenFileDialogu

Komponenta System.Windows.Forms.OpenFileDialog otevře dialogové okno Windows pro procházení a výběr souborů. K otevření a čtení vybraných souborů můžete použít metodu OpenFileDialog.OpenFile nebo vytvořit instanci System.IO.StreamReader třídy. Následující příklady ukazují oba přístupy.

Pro získání nebo nastavení FileName vlastnosti v rozhraní .NET Framework vyžaduje úroveň oprávnění udělenou System.Security.Permissions.FileIOPermission třídou. Příklady spustí FileIOPermission kontrolu oprávnění a můžou vyvolat výjimku z důvodu nedostatečných oprávnění, pokud se spustí v kontextu částečné důvěryhodnosti. Další informace najdete v tématu Základy zabezpečení přístupu kódu.

Tyto příklady můžete sestavit a spustit jako aplikace rozhraní .NET Framework z příkazového řádku jazyka C# nebo Visual Basic. Další informace naleznete v tématu Sestavení příkazového řádku pomocí csc.exe nebo Sestavení z příkazového řádku.

Počínaje .NET Core 3.0 můžete také sestavit a spustit příklady jako aplikace windows .NET Core ze složky, která obsahuje soubor projektu .NET Core model Windows Forms <název> složky.csproj.

Příklad: Čtení souboru jako streamu pomocí StreamReader

Následující příklad používá obslužnou rutinu události ovládacího prvku Click model Windows Forms Button k otevření OpenFileDialog metodyShowDialog. Jakmile uživatel vybere soubor a vybere OK, instance StreamReader třídy soubor přečte a zobrazí jeho obsah v textovém poli formuláře. Další informace o čtení ze streamů souborů naleznete FileStream.BeginRead a 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

Příklad: Otevření souboru z filtrovaného výběru pomocí souboru OpenFile

Následující příklad používá Button obslužnou rutinu Click události ovládacího prvku k otevření OpenFileDialog s filtrem, který zobrazuje pouze textové soubory. Jakmile uživatel zvolí textový soubor a vybere OK, OpenFile metoda se použije k otevření souboru v Poznámkový blok.

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

Viz také