# SaveFileDialog

This class can either open and overwrite an existing file or create a new file.

Most of the functionality for this class is found in the `FileDialog` class.

{% hint style="info" %}
For a full list of properties, methods and events see the [API documentation.](http://docs.wisej.com/api)
{% endhint %}

## Features

### Filtering

The SaveFileDialog filters files shown to the user based on a given pattern. For example, the filter `Image Files|*.jpg|All files|*.*` will show files ending with .jpg by default. Users can modify the filter using the dropdown menu.

![SaveFileDialog showing image file type filtering options](/files/-Mck0QqR71famzrZxL5e)

{% hint style="success" %}
The [FileDialog.FileName](https://docs.wisej.com/api/wisej.web/common-dialogs/wisej.web.filedialog#filename) property returns the virtual path relative to the root. To get the physical path on the server, use [FileDialog.MapPath()](https://docs.wisej.com/api/wisej.web/common-dialogs/wisej.web.filedialog#mappath-filepath).
{% endhint %}

### Check Existing Files

The SaveFileDialog validates file existence before saving to disk, helping prevent accidental file overwrites.

![SaveFileDialog showing file existence validation warning](/files/-MgQkT-3ntT7aKu4AldA)

### Help

The SaveFileDialog includes an optional "?" (Help) tool for displaying navigation assistance.

![SaveFileDialog showing help button and navigation interface](/files/-McozT9f_Ysu-bUL3LTN)

## How To

### Connect to the File System

Add at least one `IFileSystemProvider` to the Roots collection before showing the dialog:

```csharp
//Using an absolute file path
SaveFileDialog filedialog = new SaveFileDialog(); 
filedialog.Roots.Add(new FileSystemProvider("C:\\", "Main_Directory"));
```

```csharp
//Using a relative file path
SaveFileDialog filedialog = new SaveFileDialog(); 
filedialog.Roots.Add(new FileSystemProvider("./", "Main_Directory"));
```

### Customize the Appearance

The SaveFileDialog supports customization of individual controls including textboxes and pickers.

To customize these controls:

1. Create a class inheriting from `FileDialogUI`
2. Add the custom `FileDialog` constructor
3. Modify the controls as needed

{% tabs %}
{% tab title="C#" %}

```csharp
public class CustomSaveFileDialogUI : FileDialogUI
{
    public CustomSaveFileDialogUI(SaveFileDialog saveFileDialog) : base(saveFileDialog)
    {
        this.HeaderBackColor = Color.DarkOrange;
        foreach (ColumnHeader col in this.listView.Columns)
        {
            col.BackColor = Color.DarkOrange;
        }
    }
}
```

{% endtab %}
{% endtabs %}

After applying the OpenFileDialog's `DialogTemplate` property to the new class, the result looks like this:

![Customized SaveFileDialog with dark orange theme applied](/files/-MgBtvuJVCsjKaLP4scK)

For advanced customization of the `SaveFileDialog` using custom templates, see below.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wisej.com/docs/controls/common-dialogs/savefiledialog.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
