Я получил это приложение для форм Windows С#, где я загружаю файл XML или CSV файл для некоторых задач. У меня есть кнопка "Обзор". Когда я нажимаю кнопку "Обзор", появляется диалоговое окно "Открыть файл", и я могу перейти к местоположению на моем диске и выбрать файл, а затем загрузить его с помощью кнопки "Загрузить". Если я загружаю JPG или ZIP файл или любой файл, формат которого есть что угодно, кроме CSV или XML, мое приложение вылетает из строя. Есть ли способ ограничить диалоговое окно "Открыть файл", чтобы открывать только файлы CSV или XMl в С#?
Ограничение файлов, которые можно выбрать с помощью диалогового окна Open FIle
Ответ 1
использование
openFileDialog.Filter = "CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml";
таким образом отображаются только файлы csv или xml файлы. но тем не менее пользователи могут также выбирать другие типы файлов, если они вводят полное имя - поэтому проверьте выбранное имя файла и соответствующим образом скорректируйте свой код.
Ответ 2
Вы можете использовать свойство Filter
, чтобы пользователь мог выбрать определенный тип файла.
Однако! Это не гарантия. Пользователь все еще может вводить "(звездочка)" (звезда) "в поле имени файла и показывать все файлы. Поэтому вы должны проверить полученный файл в своем коде.
Вы можете сделать это с помощью метода Path.GetExtension()
.
Ответ 3
Вы можете применить фильтр в диалоговом окне "Открыть файл", в котором отображаются только файлы .xml и csv, как указано выше. С path.getextension http://msdn.microsoft.com/en-us/library/system.io.path.getextension.aspx Вы можете проверить, действительно ли пользователь выбрал файл с правильным расширением. Если выбрано неправильное расширение, вы можете предложить выбрать другой файл.
Я бы настоятельно рекомендовал проверить расширение файла перед загрузкой. Просто проверьте расширение после того, как пользователь выбрал файл. Если были выбраны неправильные файлы, просто не продолжайте загрузку/обработку...
Ответ 4
Это полный пример.
/// <summary>
/// Select CSV / XML file
/// </summary>
/// <param name="sender">
/// The sender.
/// </param>
/// <param name="e">
/// The e.
/// </param>
private void SelectCsvFile(object sender, EventArgs e)
{
var dlg = new OpenFileDialog
{
Filter = @"CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml",
CheckFileExists = true,
Title = @"Select csv/xml file to read",
Multiselect = false
};
dlg.ShowDialog();
if (dlg.FileName == string.Empty)
{
MessageBox.Show(
@"You didn't select any file !",
@"No file was selected",
MessageBoxButtons.OK,
MessageBoxIcon.Asterisk);
}
else
{
this.txtCSVFilePath.Text = dlg.FileName;
}
}