Выбор нескольких файлов c
Есть ли лучший способ использовать OpenFileDialog для выбора папки?
Если вы откроете файл проекта в редакторе, вы заметите некоторые дополнительные свойства внизу: <VCIncludePath . >, <Win32Resource . > и <Target Name = "BeforeBuild" . >. Вы увидите, что он запускает rc.exe для компиляции файла ресурсов res1.rc (обязательно скопируйте файл «resource.h» тоже в свой проект). Убедитесь, что у вас установлен VisualC и что VCIncludePath указывает на правильное местоположение (github указывает на версию VC9.0, и вам может потребоваться изменить ее). После компиляции файла .rc полученный файл .res добавляется в качестве ресурса для вашего исполняемого файла с помощью директивы Win32Resource. Существует хакерское решение, использующее OpenFileDialog, где ValidateNames и CheckFileExists оба имеют значение false, и FileName ему дается фиктивное значение, чтобы указать, что каталог выбран. Я говорю хак, потому что это сбивает с толку пользователей о том, как выбрать папку. См. Выбор файла или папки из того же диалогового окна Спасибо Дану за указание на OpenFileDialog-Hack! Это намного лучше, чем FolderBrowserDialog, потому что OFD показывает папки с закладками и т. Д., Поэтому каждый - особенно в крупных компаниях - находит свое дерьмо. FBD не принесет много пользы в этих местах. @ComradeJoecool Я преобразовал свой комментарий в ответ . Я пробовал это несколько раз, и у меня не было проблемы "файл не найден". Вы повторно используете тот же экземпляр OpenFileDialog? @DanielBallinger ах, я нашел свою проблему, так как я использую Powershell для создания диалога, настройки ValidateNames и CheckFileExists чтобы false он не работал, мне нужно было установить их 0 (или лучше изучить powershell)В основном вам нужен FolderBrowserDialog класс:
Предлагает пользователю выбрать папку. Этот класс не может быть унаследован.
Если вы работаете в WPF, вы должны добавить ссылку на System.Windows.Forms .
Вы также должны добавить using System.IO для Directory класса
В FolderBrowserDialog отсутствует удобство использования. Основным недостатком является то, что он не позволяет копировать путь к папке из Проводника Windows для быстрой навигации, что делает его бесполезным, когда вам необходимо детализировать более трех уровней. Детализация в каждой папке нежелательна, особенно когда хранилище медленное или когда у вас много папок на одном из уровней. Вопрос конкретно об использовании OpenFileDialog (OFD) для выбора папки, а не FolderBrowserDialog (FBD). Я согласен, что FBD ужасен с точки зрения пользователя. В качестве альтернативы к этому диалогу с разбитой UI, используйте CommonOpenFileDialog : new CommonOpenFileDialog < IsFolderPicker = true >. Пожалуйста, никогда не используйте его ! Я помню, как пользователь, я обвинял этих бедных программистов, которые сделали еще одно приложение с этим ужасным диалоговым окном в виде дерева (которое является просто FolderBrowserDialog) . Это совершенно непригодно: куча корневых папок, недостающая панель избранного и самое ужасное - вы даже не можете вставить туда путь! И теперь, как программист, я вижу совет использовать его . Пожалуйста, не делайте этого. У FolderBrowserDialog есть один большой недостаток помимо всего остального, что сказали другие пользователи. Он не помнит последний выбранный путь!В качестве заметки для будущих пользователей, которые хотели бы отказаться от использования FolderBrowserDialog , Microsoft однажды выпустила API под названием WindowsAPICodePack, в котором есть полезный диалог CommonOpenFileDialog , который можно установить в IsFolderPicker режим. API доступен от Microsoft в виде пакета NuGet .
Это все, что мне нужно для установки и использования CommonOpenFileDialog . (NuGet обработал зависимости)
- Включить выбор нескольких xls-файлов.
- После того как выбор сделан, отобразите выбранные имена файлов xlsx в textbox
- Скопируйте выбранные файлы в отдельный каталог.
Как я могу это сделать?
3 ответа
У меня есть приложение WinForms с OpenFileDialog в нем, и я хотел бы включить выбор нескольких файлов, когда пользователь взаимодействует с диалогом. Как я могу это сделать?
Вот пример кода:
Существует свойство MultiSelect OpenFileDialog , которое вам нужно установить в значение true , чтобы разрешить выбор нескольких файлов.
Вот пример кода из MSDN, который позволяет пользователю выбрать несколько изображений и отобразить их в элементах управления PictureBox на форме:
Объединив оба ответа, Вот код, который я придумал, чтобы:
- Позволяет пользователю выбрать несколько файлов XLSX (используя свойства MultiSelect, OpenFileDialog, this.OpenFileDialog & FileBrowserDialog)
- После того как выбор сделан, отобразите выбранные имена файлов XLSX в Textbox (установив значение textBoxSourceFiles.Text в sourceFileOpenFileDialog.FileNames)
Скопируйте выбранные файлы в отдельный консолидированный каталог (используя foreach, System.IO.File.Copy, System.IO.Path.GetFileName, sourceFileOpenFileDialog.FileName)
Мы используем OpenFileDialog в нашем приложении для выбора файлов. До сих пор мы никогда не использовали Multiselect . Мы устанавливаем значение RestoreDirectory в true, чтобы каждый раз, когда мы открываем диалоговое окно, пользователь попадал в последний используемый каталог. Если я установлю.
Похожие вопросы:
Всем Привет, Извините, что беспокою вас этим, но у меня возникла проблема с выбором нескольких файлов xlsx через окно файлового браузера в приложении winforms при отладке и я не могу понять, что я.
можно выбрать несколько файлов с помощью OpenFileDialog. (установка multiselect как true) вопрос в том, как выбрать несколько файлов и папок одновременно? Я знаю, что такое FolderBrowseDialog, я.
У меня есть приложение WinForms с OpenFileDialog в нем, и я хотел бы включить выбор нескольких файлов, когда пользователь взаимодействует с диалогом. Как я могу это сделать?
Я написал- Как использовать OpenFileDialog для выбора папки? , я не смог найти правильный ответ. Итак, я изменил свой вопрос. Я хочу настроить OpenFileDialog для выбора нескольких папок и файлов. Я.
Мы используем OpenFileDialog в нашем приложении для выбора файлов. До сих пор мы никогда не использовали Multiselect . Мы устанавливаем значение RestoreDirectory в true, чтобы каждый раз, когда мы.
Я установил функцию multiselect в своем коде, чтобы позволить мне открывать несколько файлов, которые находятся в формах .txt. И вот в чем проблема, как я буду читать все эти выбранные файлы после.
У меня возникли проблемы с отображением нескольких имен файлов с классом OpenFileDialog. Я уже выбрал Multiselect set to true и могу выбрать более одного файла в области DialogBox, но только 1 файл.
OpenFileDialog() - Как установить параметр MultiSelect на основе фильтра файлов? My OpenFileDialog может выбрать 2 типа файлов. Это используемый фильтр: LFA или лог-файлы (.МАФ, .журнал)| .МАФ; .log.
На этом шаге рассмотрим стандартное диалоговое окно выбора файлов.
Использование стандартных окон значительно ускоряет разработку тех приложений, в которых необходимо использовать диалоговые окна выбора файлов, шрифта, цвета и т. д. Вместо того чтобы тратить время на разработку своих собственных классов, можно воспользоваться готовыми классами библиотеки Qt. К достоинствам стандартных диалоговых окон можно отнести и целостность пользовательского интерфейса, т. к. вид окон во всех приложениях, их использующих, будет один и тот же.
Диалоговое окно выбора файлов предназначено для выбора одного или нескольких файлов, а также файлов, находящихся на удаленном компьютере, и поддерживает возможность переименования файлов и создания каталогов.
Класс QFileDialog предоставляет реализацию диалогового окна выбора файлов (рис. 1) и отвечает за создание и работоспособность сразу трех диалоговых окон. Одно из них позволяет осуществлять выбор файла для откры-тия, второе предназначено для выбора пути и имени файла для его сохранения, а третье — для выбора каталога.
Рис.1. Диалоговое окно выбора файлов
Класс QFileDialog унаследован от класса QDialog. Его определение находится в файле QFileDialog.
Этот класс предоставляет следующие статические методы:
- getOpenFileName() — создает диалоговое окно выбора одного файла. Этот метод возвращает значение типа QString, содержащее имя и путь выбранного файла (см. рис. 1);
- getOpenFileNames() — создает диалоговое окно выбора нескольких файлов. Возвращает список строк типа QStringList, содержащих пути и имена файлов;
- getSaveFileName() — создает диалоговое окно сохранения файла. Возвращает имя и путь файла в строковой переменной типа QString;
- getExistingDirectory() — создает окно выбора каталога. Этот метод возвращает значение типа QString, содержащее имя и путь выбранного каталога.
Первым параметром этих методов является указатель на объект-предок, вторым передается текст заголовка окна, третьим — строка, представляющая собой рабочий каталог.
Вызов метода getOpenFileName() запустит диалоговое окно открытия файла (см. рис. 1). Четвертый параметр, передаваемый в этот метод, представляет собой фильтр (или маску), задающий расширение файлов. Например:
Покажем, как можно использовать статический метод getSaveFileName(), предназначенный для диалогового окна записи файла.
Файлы приложения можно взять здесь.
При помощи метода getExistingDirectory() можно предоставить пользователю возможность выбора каталога (рис. 2). Например:
Рис.2. Диалоговое окно выбора папки
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим cтандартное диалоговое окно настройки принтера.
Глава 1 Использование контролов OpenFileDialog и SaveFileDialog для работы с файлами
Для изучения работы с контролами OpenFileDialog и SaveFileDialog создадим новое решение (подробно о создании проекта решения было раказано в первом разделе книги) или изменим уже ипользованный проект (убрав коды обработчиков событий нажатия кнопок, изменив надписи и картиночки) и поместим на форму контролы RichTextBox, OpenFileDialog и SaveFileDialog. Контролы OpenFileDialog и SaveFileDialog не визуальные и, потому, разместились ниже формы. Проект решения с которым будем работать примет вид, показанный на Рис.1.
Рис.1 Проект решения для работы с OpenFileDialog и SaveFileDialog
Дважды кликнем на форме (вне контролов) и, таким образом, создадим обработчик Form1_Load, который будет вызываться при каждой загрузки формы и который в дальнейшем будем часто использовать для начальной инициализации параметров программы и переменных. В обработчике запишем код очистки RichTextBox:
Обработчик нажатия кнопки 3 оставим прежний:
Параграф 1 Ипользование контрола OpenFileDialog
Основные свойства OpenFileDialog
Свойство AddExtension разрешает или запрещает автоматическое добавление расширение, указанное в свойстве DefaultExt.
Свойство DefaultExt - расширение, принятое по умолчанию для автоматического добавления к имени файла при AddExtension=true.
На Рис.2 показано окно предупреждение при FileName=a.doc, CheckFileExists=true и нажатии кнопки "Oткрыть" при невыбранном файле.
Рис.2 Окно предупреждения при CheckFileExists=true
Свойство FileName - имя файла по умолчанию для выборки если была нажата кнопка OK и не выбрн кликом мышки файл в окне диалога.
Рис.3 Окно предупреждения при CheckPatchExists=true
Свойство DereferenceLinks - используется для указания контролу что именно возвращпть при выборе файла ссылки - файл по ссылке (true) или файл самой сылки (false).
Свойства Filter, FilterIndex - фильтр для выбираемых файлов и индекс строки, отображаемой в окошечке "Имя файла". Например значение свойства заданного строкой при FilterIndex=1.
позволит выбрать только текстовые файлы в формате rtf или txt. В окошечке "Тип файла" будет только две строки:
а в окошечке "Имя файла" будет отображена первая.
Свойство InitialDirectory - директория, которая выбирается при старте OpenFileDialog.
Свойство MultiSelect - при значении true позволяет выбрать мышкой при нажатой кнопке Shift или Ctrl несколько файлов и сохранить их имена в свойстве FileNames в виде массива строк.
Свойство ReadOnlyChecked - при значении true позволяет открывать команде OpenFile выбранные файлы только в режиме чтения.
Свойство RestoreDirectory - при true диалоговое окно восстанавливает текущий каталог к первоначальному значению если пользователь изменил каталог при поиске файлов, при false - нет.
Свойство работает только если закрыт поток Stream, созданный методом openFileDialog1.OpenFile().
Свойство ShowHelp - при значении true в окне диалога отображается кнопка "Справка".
Свойство ShowReadOnly - при значении true в окне диалога отображается переключатель "Только для чтения".
Свойство Title - заголовок диалогового окна.
Свойство ValidateNames - при true проверяет допустимость имени для файла применительно к Win32. Никакое заданное по умолчанию в этом случае не добавляется.
Отметим, что ве свойcтва могут быть заданы на этапе проектирования и программно - путем присвоения соответствующих значений.
Загрузка содержимого файла с использованием OpenFileDialog
Filter - rtf файлы (*.rtf)|*.rtf
Пометим в директорию C:\ какой либо файл в формате .rtf (например который был создан в первом разделе "a.tf") и загрузим его в RichTextBox. Для этого напишем в обработчике нажатия кнопки 1 следующий код:
Ели мы выбрали файл C:\a.rtf, то это имя отобразится в заглавии формы.
Если теперь в войстве FileName запишем a.rtf, то при открытии диалога буковка "a" появляется в окошечке "Имя файла" и можно выполнить загрузку не выбирая мышкой файл, а сразу нажав кнопочку "OK".
Дотаточно в войстве FileName записать a.doc и повторить то, что только что проделали выше, как получим предупреждение об отсутствии файла (см Рис.2) и файл уже придется выбирать кликом мышки (кстати, отетим еще раз, что если утановить войство CheckFileExists в false то получим возбуждение иключения).
Рассмотрим еще один способ, который позволяет загружать фйлы в формате .txt. Добавим на форму контрол TextBox и установим его свойство MultiLine в true, в обработчике Form1_Load допишем строку
а cвойству Filter присвоим значение
В обработчике события нажатия кнопки 1 напишем код для чтения текстовых файлов.
Ели прочитаем текстовый файл в формате .rtf, то увидим уже знакомое нам по первому разделу содержимое файла, а при чтении текстового файла в формате .txt именно текст (см Рис.4).
Рис.4 Чтение файлов в формате .rtf(сле) и.txt(спрва) в ткстовом режиме
Параграф 2 Ипользование контрола SaveFileDialog
Основные свойства SaveFileDialog
Следует отметить, что все свойства отображаемые в окне Proporties для SaveFileDialog аналогичны OpenFileDialog и имеют тоже назначение и тот же принцип использования, и, поэтому, в отдельном их расмотрении нет необходимости.
Сохранение информации в файл с использованием SaveFileDialog
Filter - rtf файлы (*.rtf)|*.rtf|txt файлы(*.txt)|*.txt
Последнее актуально именно для SaveFileDialog и позволяет не задавать в окошечке "имя файла" полное имя если файл будет сохраняться как .rtf файл.
Читайте также: