web-dev-qa-db-de.com

SaveFileDialog Standardpfad und Dateityp festlegen?

Ich benutze SaveFileDialog.SaveFile. Wie kann ich den Standardbuchstaben (Betriebssystem) des Laufwerks erhalten und auch die Option einschränken, nur .BIN als Dateierweiterung anzuzeigen?

Ich habe versucht, die Dokumente auf MSDN zu lesen, aber ich bin dazu noch neu und ehrlich gesagt, finde ich sie manchmal unklar.

40
user636438

Das SaveFileDialog-Steuerelement wird überhaupt nicht gespeichert. Sie erhalten lediglich eine praktische Benutzeroberfläche, um das Standarddialogfeld zum Speichern von Dateien von Windows anzuzeigen.

1) Setzen Sie die Eigenschaft InitialDirectory auf das Laufwerk, auf dem Sie einen anderen Standardwert anzeigen möchten. Denken Sie nur an andere Computer, die ein anderes Layout haben könnten. Standardmäßig speichert Windows das zuletzt verwendete Verzeichnis und zeigt es erneut an.

2) Das wird außerhalb der Kontrolle gehandhabt. Sie müssen die Ergebnisse des Dialogs überprüfen und dann das Speichern selbst durchführen (z. B. Schreiben einer Text- oder Binärdatei).

Ein kurzes Beispiel (es gibt alternative Möglichkeiten, dies zu tun) .savefile ist ein Steuerelement des Typs 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!");
}
90
Mario

Environment.GetSystemVariable ("% SystemDrive%"); stellt das installierte Laufwerks-Betriebssystem bereit, und Sie können Filter auf saveialog setzen. Dateipfad des C # -Speicherdialogfelds erhalten .

4
adt

Hier ist ein Beispiel, das tatsächlich nach BIN-Dateien filtert. Auch Windows möchte jetzt, dass Sie Dateien an Benutzerspeicherorten speichern, nicht an Systemspeicherorten. Hier ein Beispiel (Sie können mit intellisense die anderen Optionen durchsuchen):

            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
            }
1
Robin Bennett

Tolle Frage! Keine der Antworten war genau das, was ich brauchte, also kam ich dazu.

        // 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);
        }
0