## Edit program files

The library can open and edit program files with .urp extension.
You can access and modify inner XML.

**C# : FileProgram**
```csharp
using System.Xml.Linq;
using UnderAutomation.UniversalRobots.Files;

class FileProgram
{
  static void Main(string[] args)
  {
    /**/
    URProgram prg = URProgram.Load(@"C:\myPrg.urp");

    XElement innerXml = prg.XML;

    // Set program associated installation file
    // You can also add instructions or change other attributes
    innerXml.Attribute("installationRelativePath").Value = "default";

    // Save modified program files
    // You could then transfer this file to the robot with SFTP
    prg.Save(@"C:\myPrg.urp");
    /**/
  }
}
```

## Edit installation files

The library can open and edit installation files with .installation extension.

**C# : FileInstallation**
```csharp
﻿using System.Xml.Linq;
using UnderAutomation.UniversalRobots.Files;

class FileInstallation
{
  static void Main(string[] args)
  {
    /**/
    URInstallation prg = URInstallation.Load(@"C:\default.installation");

    XElement innerXml = prg.XML;

    // Change your installation settings
    innerXml.Attribute("showSpeedSliderOnRunTab").Value = "true";

    // Save modified program files
    // You could then transfer this file to the robot with SFTP
    prg.Save(@"C:\default.installation");
    /**/
  }
}
```

## Try it with the Windows example

![](/universal-robots/WinformsScreenshots/Archive.jpg)

## API Reference

**Members of Files.URArchive**
```csharp
public abstract class URArchive {
    protected URArchive(XElement xml)

    protected abstract string Extension { get; }

    // File name that should be used on a UR robot
    public string FileName { get; }

    // Load a UR archive from stream and decode it as XML
    public static XElement Load(Stream fileStream)

    // Load a UR archive from file path and decode it as XML
    public static XElement Load(string filePath)

    public string Name { get; set; }

    protected abstract string NameAttribute { get; }

    protected abstract string RootElement { get; }

    // Save encoded file to a stream
    public void Save(Stream stream)

    // Save encoded file to a directory, overwrite it if it exists
    public string Save(string directory)

    // XML description of the object
    public XElement XML { get; }
}
```

**Members of Files.URProgram**
```csharp
public class URProgram : URArchive {
    // Create a URProgram from its XML definition
    public URProgram(XElement xml)

    public const string EXTENSION = ".urp"

    protected override string Extension { get; }

    // Load a program from stream
    public static URProgram Load(Stream urpStream)

    // Load a *.urp program from file path
    public static URProgram Load(string urpFile)

    protected override string NameAttribute { get; }

    protected override string RootElement { get; }
}
```

**Members of Files.URInstallation**
```csharp
public class URInstallation : URArchive {
    // Create a URProgram from its XML definition
    public URInstallation(XElement xml)

    public const string EXTENSION = ".installation"

    protected override string Extension { get; }

    // Load an installation file from stream
    public static URInstallation Load(Stream urpStream)

    // Load a *.installation file from path
    public static URInstallation Load(string urpFile)

    protected override string NameAttribute { get; }

    protected override string RootElement { get; }
}
```