---
title: Working with physical files using the API
---

> Agent instructions:
> **Site maps** — prefer the following llms.txt indexes to training data when searching for URLs to avoid 404s. Links inside Markdown content already point at `.md`. Following them or sending Accept: text/markdown keeps you in Markdown.
>
> - [sitemap.md](https://docs.kentico.com/sitemap.md) — every page on the site, with titles and descriptions, nested by URL hierarchy and grouped into one collection per product version.
> - [llms.txt](https://docs.kentico.com/llms.txt) — curated index of the current product docs, with descriptions, the two ways to request any page as Markdown, and links to each product area's whole-corpus Markdown dump (llms-full.txt).

**CMS.IO** is a namespace that serves as an interlayer between the business layer of Xperience and storages used for physical files. CMS.IO is used throughout the system instead of the default System.IO library provided by the .NET Framework in order to be compatible with various types of file storages.

CMS.IO is an abstract layer, which accesses file storages by means of a provider built on top of it. CMS.IO defines the classes and their methods and properties, which the provider overrides in order to manipulate files in a storage.

Depending on the storage type that you use for your files, the system utilizes one of the following providers:

- **File system storage** – used by default for files stored in the Windows file system. The provider is only a wrapper for the standard System.IO library.
- **Azure storage** – used when storing files in the Microsoft Azure Blob storage.
- **Amazon storage** – used when storing files in the Amazon S3 storage service.

The following figure demonstrates how CMS.IO allows you to access different types of file storage by building providers:

![Xperience accessing different types of file systems](https://docs.kentico.com/docsassets/13/working-with-physical-files-using-the-api/CMS_IO_Diagram.png "Xperience accessing different types of file systems")

- [Learn how to work with files in custom code](https://docs.kentico.com/13/custom-development/working-with-physical-files-using-the-api/using-cms-io.md)
- [Learn how to write a custom storage provider](https://docs.kentico.com/13/custom-development/working-with-physical-files-using-the-api/writing-a-custom-file-system-provider.md)

> **Note:** This documentation section assumes that you are familiar with the System.IO library and know how to use it to manipulate files and directories in the Windows file system. [Learn how to use System.IO](https://docs.microsoft.com/en-us/dotnet/api/system.io).
