Revision Difference
FileSystem#548611
<cat>Code.Intro</cat>
<title>FileSystem</title>
Standard .NET file access is restricted to prevent rogue access to your files, this means you can not use System.IO.File or variants directly.
Instead Sandbox provides a [BaseFileSystem](https://asset.party/api/Sandbox.BaseFileSystem) for several virtual filesystems that can only access files within specific game directories.
Instead, s&box provides a [BaseFileSystem](https://asset.party/api/Sandbox.BaseFileSystem) for several virtual filesystems that can only access files within specific game directories.
```csharp
// Example of using a FileSystem to read/write a file
if ( !FileSystem.Data.FileExists( "player.txt" ) )
FileSystem.Data.WriteAllText( "player.txt", "hello world" );
var hello = FileSystem.Data.ReadAllText( "player.txt" );
```
```csharp
// Example of using a FileSystem to save and load player data.
class PlayerData ⤶
class PlayerData⤶
{
// ...
public static void Save(PlayerData data){
FileSystem.Data.WriteJson("player_data.json", data);
public static void Save( PlayerData data )
{
FileSystem.Data.WriteJson( "player_data.json", data );⤶
}
public static PlayerData Load(){
return FileSystem.Data.ReadJson<PlayerData>("player_data.json");
public static PlayerData Load()
{
return FileSystem.Data.ReadJson<PlayerData>( "player_data.json" );⤶
}
⤶
// ...⤶
}
```⤶
⤶
Key Notes: To pass in a class to 'FileSystem.Data.WriteJson' the variables must be properties. For Example⤶
```csharp⤶
⤶
```⤶
⤶
<note>⤶
WriteJson / ReadJson will only work with properties of your class unless directed not to - make sure the things you want to save are properties!⤶
⤶
```csharp⤶
public class PlayerData
{
public int playerLevel { get; set; }⤶
public int playerMaxHealth { get; set; }⤶
public string playerUsername { get; set; }
public int Level { get; set; } // fine⤶
public int MaxHealth { get; set; } // fine⤶
public string Username; // bad !!
}
```
⤶
</note>⤶
### FileSystem.Mounted
[FileSystem.Mounted](https://asset.party/api/Sandbox.FileSystem.Mounted) is an aggregate filesystem of all mounted content from the core game, the current gamemode and it's dependencies. It is a combination of the following directories:
[FileSystem.Mounted](https://asset.party/api/Sandbox.FileSystem.Mounted) is an aggregate filesystem of all mounted content from the core game, the current gamemode and its dependencies. It's a combination of the following directories:
* `sbox\core\`
* `sbox\addons\myaddon\`
* `sbox\addons\myaddon\code\`
* `sbox\addons\base\`
* `sbox\addons\base\code\`
* `sbox\addons\citizen\`
* `sbox\addons\citizen\code\`
* `sbox\addons\rust\`
* `sbox\addons\rust\code\`
Any time you try to read a file it will search each of these paths.
### FileSystem.Data
[FileSystem.Data](https://asset.party/api/Sandbox.FileSystem.Data) is a place to store user data for your game.
`C:\Steam\steamapps\common\sbox\data\org\game\`
### FileSystem.OrganizationData
[FileSystem.OrganizationData](https://asset.party/api/Sandbox.FileSystem.OrganizationData) is a place to store user data across several games in your organization.
`C:\Steam\steamapps\common\sbox\data\org\`