# ArchiveFileInterface

> Provides methods for managing Unity archive files.

## Definition

* **Type:** Class
* **Namespace:** [Unity.IO.Archive](/engine/6000.3/script-reference/unity/io/archive.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public static class ArchiveFileInterface
```

## Remarks

This class offers a low level interface for managing Unity archive files.

Archive files are mounted into a [ContentNamespace](/engine/6000.3/script-reference/unity/content/contentnamespace.md). Once an archive is mounted its contents can be accessed with [AsyncReadManager](/engine/6000.3/script-reference/unity/io/lowlevel/unsafe/asyncreadmanager.md) or [ContentLoadInterface.LoadContentFileAsync](/engine/6000.3/script-reference/unity/loading/contentloadinterface/loadcontentfileasync.md).

AssetBundles use the archive format and can be loaded with this API, but in most cases it's preferable to load AssetBundles using the [AssetBundle](/engine/6000.3/script-reference/unityengine/assetbundle.md) class, or via the Addressables package.

The `data.unity3d` file generated when [BuildPipeline.BuildPlayer](/engine/6000.3/script-reference/unityeditor/buildpipeline/buildplayer.md) is called with [BuildOptions.CompressWithLz4](/engine/6000.3/script-reference/unityeditor/buildoptions/compresswithlz4.md) or [BuildOptions.CompressWithLz4HC](/engine/6000.3/script-reference/unityeditor/buildoptions/compresswithlz4hc.md) is also an archive file. In that case the `ArchiveFileInterface` API is not normally needed, because the contents of the archive are automatically available in the Player.

Additional Resources: [ContentBuildInterface.ArchiveAndCompress](/engine/6000.3/script-reference/unityeditor/build/content/contentbuildinterface/archiveandcompress.md).

## Examples

```csharp
// The following example describes how to create an archive with
// ContentBuildInterface.ArchiveAndCompress and mount the archive with
// ArchiveFileInterface.MountAsync. This example produces an archive that uses LZ4
// compression and contains one text file.

using Unity.Collections.LowLevel.Unsafe;
using Unity.Content;
using Unity.IO.Archive;
using Unity.IO.LowLevel.Unsafe;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor.Build.Content;
#endif

public class SampleBehaviour : MonoBehaviour
{
#if UNITY_EDITOR
  unsafe void CreateAndMountArchive()
  { 
    // Create the Archive
    ResourceFile[] rFiles = new ResourceFile[1];
    ResourceFile rf = new ResourceFile();
    rf.fileName = "Assets/file1.txt"; // Path of the existing file, to copy into the Archive
    rf.fileAlias = "file1.txt";       // Path given to the file inside the Archive
    rFiles[0] = rf;

    string archivePath = System.IO.Path.Combine(Application.streamingAssetsPath, "myArchive");
    ContentBuildInterface.ArchiveAndCompress(rFiles, archivePath, UnityEngine.BuildCompression.LZ4);

    // Mount the Archive
    var ns = ContentNamespace.GetOrCreateNamespace("MyNamespace123");
    ArchiveHandle ahandle = ArchiveFileInterface.MountAsync(ns, archivePath, "a:");
    ahandle.JobHandle.Complete();

    string textFilePath = ahandle.GetMountPath() + "file1.txt"; // ns:/MyNamespace123/a:/file1.txt
    ReadCommand cmd;
    cmd.Size = 1024;
    cmd.Buffer = UnsafeUtility.Malloc(cmd.Size, 4, Unity.Collections.Allocator.Temp);
    cmd.Offset = 0;

    NativeArray<ReadCommand> cmds = new NativeArray<ReadCommand>(1, Allocator.Persistent);
    cmds[0] = cmd;

    ReadHandle rHandle = AsyncReadManager.Read(textFilePath, (ReadCommand*)cmds.GetUnsafePtr(), 1);
    rHandle.JobHandle.Complete();

    // ...At this point cmd.Buffer contains contents from file1.txt (up to 1024 bytes)...

    rHandle.Dispose();
    UnsafeUtility.Free(cmd.Buffer, Unity.Collections.Allocator.Temp);
    cmds.Dipose():

    ahandle.Unmount().Complete();
  }
#endif
}
```

## Static Methods

| Method                                                                                                            | Description                                     |
| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| [GetMountedArchives](/engine/6000.3/script-reference/unity/io/archive/archivefileinterface/getmountedarchives.md) | Retrieves all mounted archives.                 |
| [MountAsync](/engine/6000.3/script-reference/unity/io/archive/archivefileinterface/mountasync.md)                 | Loads all files in an archive to a mount point. |
