---
id: "T:cAlgo.API.FileAssociations"
kind: "interface"
namespace: "cAlgo.API"
url: "https://help.ctrader.com/ctrader-algo/references/Plugin/FileAssociation/FileAssociations/"
---

> Documentation index for agents: https://help.ctrader.com/ctrader-algo/llms.txt · machine index: https://help.ctrader.com/ctrader-algo/api.json

# FileAssociations (interface)

Represents the collection of plugin file associations.

Environments: Desktop supported · CLI not supported · Cloud not supported.

- CLI: Available to plugins only, and plugins cannot run in the CLI.
- Cloud: Available to plugins only, and plugins cannot run in the cloud.

## Definition

```csharp
public interface FileAssociations
```

Available since cAlgo.API 5.1.

## Examples

C#:

```csharp
using cAlgo.API;
using System.IO;

namespace cAlgo.Plugins;

public partial class Test : Plugin
{
    private const string FileSvgIcon = "<svg width='800px' height='800px' viewBox='0 0 1024 1024' class='icon'  version='1.1' xmlns='http://www.w3.org/2000/svg'><path d='M512 960c-92.8 0-160-200-160-448S419.2 64 512 64s160 200 160 448-67.2 448-160 448z m0-32c65.6 0 128-185.6 128-416S577.6 96 512 96s-128 185.6-128 416 62.4 416 128 416z' fill='#050D42' /><path d='M124.8 736c-48-80 92.8-238.4 307.2-363.2S852.8 208 899.2 288 806.4 526.4 592 651.2 171.2 816 124.8 736z m27.2-16c33.6 57.6 225.6 17.6 424-97.6S905.6 361.6 872 304 646.4 286.4 448 401.6 118.4 662.4 152 720z' fill='#050D42' /><path d='M899.2 736c-46.4 80-254.4 38.4-467.2-84.8S76.8 368 124.8 288s254.4-38.4 467.2 84.8S947.2 656 899.2 736z m-27.2-16c33.6-57.6-97.6-203.2-296-318.4S184 246.4 152 304 249.6 507.2 448 622.4s392 155.2 424 97.6z' fill='#050D42' /><path d='M512 592c-44.8 0-80-35.2-80-80s35.2-80 80-80 80 35.2 80 80-35.2 80-80 80zM272 312c-27.2 0-48-20.8-48-48s20.8-48 48-48 48 20.8 48 48-20.8 48-48 48zM416 880c-27.2 0-48-20.8-48-48s20.8-48 48-48 48 20.8 48 48-20.8 48-48 48z m448-432c-27.2 0-48-20.8-48-48s20.8-48 48-48 48 20.8 48 48-20.8 48-48 48z' fill='#2F4BFF' /></svg>";

    protected override void OnStart()
    {
        var addFileAssociationButton = new Button {Text = "Add File Association for '.test' Extension"};

        addFileAssociationButton.Click += args =>
        {
            FileAssociations.Add(".test", new SvgIcon(FileSvgIcon));

            MessageBox.Show("File Association added for '.test' file extension, create a new file with '.test' extension and open it");
        };

        var removeFileAssociationButton = new Button {Text = "Remove File Association for '.test' Extension"};

        removeFileAssociationButton.Click += args =>
        {
            FileAssociations.Remove(".test");
        };

        var panel = new StackPanel {Orientation = Orientation.Vertical};

        panel.AddChild(addFileAssociationButton);
        panel.AddChild(removeFileAssociationButton);

        var aspBlock = Asp.SymbolTab.AddBlock("File Association Test");

        aspBlock.Child = panel;

        // Whenever a file that has association is opened
        // this event will be triggered and you can use
        // args to get the file path and read it.
        FileAssociations.FileOpened += args =>
        {
            Print($"File {args.FilePath} opened, Size: {new FileInfo(args.FilePath).Length}");
        };
    }
}
```

Python:

```python
import clr
clr.AddReference("cAlgo.API")

from cAlgo.API import *
from System.IO import FileInfo

class Test():
    FileSvgIcon = "<svg width='800px' height='800px' viewBox='0 0 1024 1024' class='icon'  version='1.1' xmlns='http://www.w3.org/2000/svg'><path d='M512 960c-92.8 0-160-200-160-448S419.2 64 512 64s160 200 160 448-67.2 448-160 448z m0-32c65.6 0 128-185.6 128-416S577.6 96 512 96s-128 185.6-128 416 62.4 416 128 416z' fill='#050D42' /><path d='M124.8 736c-48-80 92.8-238.4 307.2-363.2S852.8 208 899.2 288 806.4 526.4 592 651.2 171.2 816 124.8 736z m27.2-16c33.6 57.6 225.6 17.6 424-97.6S905.6 361.6 872 304 646.4 286.4 448 401.6 118.4 662.4 152 720z' fill='#050D42' /><path d='M899.2 736c-46.4 80-254.4 38.4-467.2-84.8S76.8 368 124.8 288s254.4-38.4 467.2 84.8S947.2 656 899.2 736z m-27.2-16c33.6-57.6-97.6-203.2-296-318.4S184 246.4 152 304 249.6 507.2 448 622.4s392 155.2 424 97.6z' fill='#050D42' /><path d='M512 592c-44.8 0-80-35.2-80-80s35.2-80 80-80 80 35.2 80 80-35.2 80-80 80zM272 312c-27.2 0-48-20.8-48-48s20.8-48 48-48 48 20.8 48 48-20.8 48-48 48zM416 880c-27.2 0-48-20.8-48-48s20.8-48 48-48 48 20.8 48 48-20.8 48-48 48z m448-432c-27.2 0-48-20.8-48-48s20.8-48 48-48 48 20.8 48 48-20.8 48-48 48z' fill='#2F4BFF' /></svg>"

    def on_start(self):
        addFileAssociationButton = Button()
        addFileAssociationButton.Text = "Add File Association for '.test' Extension"
        addFileAssociationButton.Click += self.on_add_file_association_button_click

        removeFileAssociationButton = Button()
        removeFileAssociationButton.Text = "Remove File Association for '.test' Extension"
        removeFileAssociationButton.Click += lambda _: api.FileAssociations.Remove(".test")

        panel = StackPanel()
        panel.Orientation = Orientation.Vertical

        panel.AddChild(addFileAssociationButton)
        panel.AddChild(removeFileAssociationButton)

        aspBlock = api.Asp.SymbolTab.AddBlock("File Association Test")
        aspBlock.Child = panel

        # Whenever a file that has association is opened
        # this event will be triggered and you can use
        # args to get the file path and read it.
        api.FileAssociations.FileOpened += lambda args: print(f"File {args.FilePath} opened, Size: {FileInfo(args.FilePath).Length}")

    def on_add_file_association_button_click(self, args):
        api.FileAssociations.Add(".test", SvgIcon(self.FileSvgIcon))
        MessageBox.Show("File Association added for '.test' file extension, create a new file with '.test' extension and open it")
```

config.json:

```json
{
  "AccessRights": "None"
}
```

## Methods

- `void Add(string fileExtension, string iconFilePath)` — Adds a file extension to the list of associations along with a specified icon file path. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/FileAssociation/FileAssociations/Add/index.md)
- `void Add(string fileExtension, SvgIcon svgIcon)` — Adds a file extension to the list of associations along with a specified icon file path. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/FileAssociation/FileAssociations/Add/index.md)
- `void Add(string fileExtension)` — Adds a file extension to the list of associations without specifying an icon. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/FileAssociation/FileAssociations/Add/index.md)
- `bool Contains(string fileExtension)` — Checks if the specified file extension is already associated. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/FileAssociation/FileAssociations/Contains/index.md)
- `void Remove(string fileExtension)` — Removes a file extension from the list of associations. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/FileAssociation/FileAssociations/Remove/index.md)

## Events

- `event Action<FileAssociationsFileOpenedEventArgs> FileOpened;` — Event triggered when a file associated with a registered extension is opened. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/FileAssociation/FileAssociations/FileOpened/index.md)

