Подтвердить что ты не робот

SaveFileDialog устанавливает путь по умолчанию и тип файла?

Я использую SaveFileDialog.SaveFile. Как я могу получить его на букву диска по умолчанию (операционная система), а также ограничить возможности отображения только .BIN в качестве расширения файла?

Я пробовал читать документы в MSDN, но я очень к этому знаком, и, честно говоря, я иногда их не понимаю.

4b9b3361

Ответ 1

Элемент управления SaveFileDialog вообще не будет экономить. Все это дает вам удобный интерфейс для фактического отображения диалогового окна сохранения файлов Windows по умолчанию.

1) Установите свойство InitialDirectory на диск, который вы хотите, чтобы он отображал некоторые другие значения по умолчанию. Просто подумайте о других компьютерах, которые могут иметь разный макет. По умолчанию окна будут сохранять каталог, используемый в последний раз, и представить его снова.

2) Это выполняется вне контроля. Вам нужно будет проверить результаты диалога, а затем сделать сохранение самостоятельно (например, написать текстовый или двоичный файл).

Как быстрый пример (есть альтернативные способы сделать это). savefile - это управление типом SaveFileDialog

SaveFileDialog savefile = new SaveFileDialog(); 
// set a default file name
savefile.FileName = "unknown.txt";
// set filters - this can be done in properties as well
savefile.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";

if (savefile.ShowDialog() == DialogResult.OK)
{
    using (StreamWriter sw = new StreamWriter(savefile.FileName))
        sw.WriteLine ("Hello World!");
}

Ответ 3

Вот пример, который фактически фильтрует файлы BIN. Также Windows теперь хочет, чтобы вы сохраняли файлы в пользовательских местах, а не в локациях системы, поэтому здесь приведен пример (вы можете использовать intellisense для просмотра других опций):

            var saveFileDialog = new Microsoft.Win32.SaveFileDialog()
            {
                DefaultExt = "*.xml",
                Filter = "BIN Files (*.bin)|*.bin",
                InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
            };

            var result = saveFileDialog.ShowDialog();
            if (result != null && result == true)
            {
                // Save the file here
            }

Ответ 4

Отличный вопрос! Ни один из ответов не был именно тем, что мне нужно, так что это то, что я придумал.

        // get path to save file
        string fn = DateTime.Now.ToShortDateString() + " " + cbMaterial.SelectedItem.ToString(); //this combobox is my report name
        SaveFileDialog sfd = new SaveFileDialog();
        sfd.FileName = fn.Replace("/","-").Replace(" ","_");
        sfd.Filter = "(*.csv)|*.csv";
        sfd.ShowDialog();
        string path = sfd.FileName;

        //Build the CSV file data as a Comma separated string.
        string csv = string.Empty;

        //Add the Header row for CSV file.
        foreach (DataGridViewColumn column in gvReports.Columns)
        {
            csv += column.HeaderText + ',';
        }

        //Add new line.
        csv += "\r\n";

        //Adding the Rows
        foreach (DataGridViewRow row in gvReports.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                //Add the Data rows.
                csv += cell.Value.ToString().Replace(",", ";") + ',';
            }

            //Add new line.
            csv += "\r\n";
        }

        if (sfd.FileName != null)
        {
            //Exporting to CSV.
            File.WriteAllText(path, csv);
        }