OpenFileDialog продолжает показывать файлы .lnk WPF - PullRequest
2 голосов
/ 09 мая 2019

Можно ли заставить OpenFileDialog не показывать ярлыки?

Я хочу получить только PDF, поэтому я использую фильтр, подобный этому

var dialog = new OpenFileDialog
            {
                Multiselect = false,
                Filter = "Pdf Files|*.pdf"
            };

Но когда диалоговое окнопоказаны файлы с pdf расширением и lnk с расширением

example image

Возможно ли это предотвратить?

Ответы [ 4 ]

1 голос
/ 09 мая 2019

Ответ с форумов MSDN

Из коробки OpenFileDialog не может этого сделать. Причиной может быть то, что .lnk файлы могут использоваться пользователем для перехода в другую папку, где он ожидает файл, который необходимо открыть.

В приведенной выше ссылке пользователь Ryan разместил фрагмент, чтобы исключить выбранные .lnk файлы в событии FileOK.

Опять не мой код! Но поскольку некоторые веб-сайты перемещают свой контент и ссылка может перестать работать, здесь приведен фрагмент кода «Райана» (написанный на VB):

Public Class Home

    Private WithEvents _fileDialog As New OpenFileDialog

    Private Sub BrowseButton1_Click(sender As Object, e As EventArgs) Handles BrowseButton1.Click
        With Me._fileDialog
            .DereferenceLinks = True    ' this allows the FileName property to have the Target of a shortcut link, instead of the shortcut link file name
            .Multiselect = False
            .Filter = "CSV (Comma delimited) (*.csv)|*.csv"
            .ShowDialog()
        End With
    End Sub

    Private Sub _fileDialog_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles _fileDialog.FileOk
        If Not Me._fileDialog.FileName Like "*.csv" Then
            ' cancel any shortcut files here
            e.Cancel = True
            MsgBox("You must select a CSV (Comma delimited) file.", MsgBoxStyle.Exclamation)
        Else
            Me.TextBox1.Text = Me._fileDialog.FileName
        End If
    End Sub

End Class
0 голосов
/ 10 мая 2019

Вы не можете сделать диалог открытия файла, чтобы скрыть определенные файлы. Единственное, что вы можете сделать, это использовать тег Filter , чтобы отфильтровать указанное расширение файла с целью сохранения, но не скрытия.

0 голосов
/ 09 мая 2019

Причина, по которой вы не хотите показывать .lnk файлы, в том, что вы хотите указать путь к реальному файлу PDF? Если это так, вы можете установить для свойства DereferenceLinks значение true. Если пользователь выбирает файл .lnk, диалоговое окно возвращает путь к файлу, на который указывает файл .lnk, а не сам файл .lnk.

0 голосов
/ 09 мая 2019

т.е. в диалоге сохранения я использую его для файлов Excel

SaveFileDialog saveFileDialog1 = new SaveFileDialog();

      saveFileDialog1.Filter = "Excel files (*.xlsx)|*.xlsx";
      saveFileDialog1.FilterIndex = 2;
      saveFileDialog1.RestoreDirectory = true;

поэтому с открытым файлом диалог должен быть таким же

...