ktsu.AppDataStorage 1.1.54

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package ktsu.AppDataStorage --version 1.1.54                
NuGet\Install-Package ktsu.AppDataStorage -Version 1.1.54                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ktsu.AppDataStorage" Version="1.1.54" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ktsu.AppDataStorage --version 1.1.54                
#r "nuget: ktsu.AppDataStorage, 1.1.54"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ktsu.AppDataStorage as a Cake Addin
#addin nuget:?package=ktsu.AppDataStorage&version=1.1.54

// Install ktsu.AppDataStorage as a Cake Tool
#tool nuget:?package=ktsu.AppDataStorage&version=1.1.54                

ktsu.AppDataStorage

ktsu.AppDataStorage is a .NET library designed to simplify the process of managing application data. It facilitates saving and loading configuration or state data to the application's data folder, leveraging JSON serialization.

Features

  • Easy-to-use API: Intuitive methods for saving and loading data.
  • Automatic Backup: Backs up original files before overwriting to ensure data safety.
  • Custom Serialization Options: Uses System.Text.Json with support for custom converters.
  • File System Abstraction: Uses System.IO.Abstractions for easy unit testing and mocking.
  • Debounced Saves: Prevents frequent file writes to improve performance.
  • Support for Multiple Applications: Organizes data by application domain for isolation.
  • Static Instance Access: Provides easy access to a singleton-like instance for centralized data management.

Installation

Install the package via NuGet:

dotnet add package ktsu.AppDataStorage

Usage

Defining Your Application Data Class

Create a class that inherits from AppData<T>, where T is your custom data type.

public class MyAppData : AppData<MyAppData>
{
    public string Setting1 { get; set; } = "hello";
    public int Setting2 { get; set; } = 12;
}

Loading Data

Load existing data or create a new instance if no data file exists using LoadOrCreate.

var data = MyAppData.LoadOrCreate();
Console.WriteLine(data.Setting1);
Console.WriteLine(data.Setting2);

// Output:
// hello
// 12

Accessing the Static Instance

The AppData<T> class provides a static instance through the Get method, which ensures a single, easily accessible instance is available throughout your application:

var data = MyAppData.Get();
Console.WriteLine(data.Setting1);

The static instance is initialized automatically and matches the instance returned by LoadOrCreate. Changes to the static instance are persistent once saved:

var data = MyAppData.Get();
data.Setting1 = "new value";
data.Save();

var sameData = MyAppData.Get();
Console.WriteLine(sameData.Setting1);

// Output:
// new value

This functionality is useful for applications where centralized access to app data is required without repeatedly loading or instantiating objects.

Saving Data

Modify properties and save the data using the Save method.

var data = MyAppData.Get();
data.Setting1 = "goodbye";
data.Setting2 = 42;
data.Save();

var reloadedData = MyAppData.Get();
Console.WriteLine(reloadedData.Setting1);
Console.WriteLine(reloadedData.Setting2);

// Output:
// goodbye
// 42

Queued and Debounced Saving

For scenarios with frequent updates, you can queue save operations using QueueSave, which automatically debounces writes to avoid frequent file system operations.

MyAppData.QueueSave();  // Schedules a save
MyAppData.SaveIfRequired();  // Performs the save if the debounce threshold is exceeded

Writing and Reading Arbitrary Text Files

Write and read arbitrary files in the application's data folder using the static AppData class.

Write Text:
AppData.WriteText("example.txt".As<FileName>(), "Hello, AppData!");
Read Text:
string content = AppData.ReadText("example.txt".As<FileName>());
Console.WriteLine(content);

// Output:
// Hello, AppData!

Customizing Serialization

Serialization behavior can be customized using JsonSerializerOptions. By default, the library uses:

  • Indented JSON for readability.
  • ReferenceHandler.Preserve for circular references.
  • Converters such as JsonStringEnumConverter and ToStringJsonConverter.

Directory and File Paths

Data is stored in a directory unique to the current application domain:

var appDataPath = AppData.Path;
Console.WriteLine($"App Data Path: {appDataPath}");

Advanced Features

Backup and Temporary Files

Backup and temporary files are automatically managed during save operations to ensure data integrity:

  • Backup file extension: .bk
  • Temporary file extension: .tmp

File System Abstraction

The library uses System.IO.Abstractions, allowing you to inject a custom file system implementation for testing.

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

License

This project is licensed under the MIT License.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on ktsu.AppDataStorage:

Package Downloads
ktsu.CredentialCache

CredentialCache

ktsu.GitIntegration

Git Integration

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.4.7 161 1/3/2025
1.4.7-pre.7 2 1/8/2025
1.4.7-pre.6 33 1/7/2025
1.4.7-pre.5 39 1/5/2025
1.4.7-pre.4 59 1/3/2025
1.4.7-pre.3 40 1/3/2025
1.4.7-pre.2 44 1/3/2025
1.4.7-pre.1 46 1/3/2025
1.4.6 92 1/2/2025
1.4.5 85 1/2/2025
1.4.4 74 1/2/2025
1.4.3 72 1/2/2025
1.4.2 77 1/2/2025
1.4.1 73 1/2/2025
1.4.0 74 1/2/2025
1.3.16 171 1/2/2025
1.3.16-pre.6 48 1/2/2025
1.3.16-pre.5 66 12/31/2024
1.3.16-pre.4 41 12/30/2024
1.3.16-pre.3 43 12/29/2024
1.3.16-pre.2 39 12/28/2024
1.3.16-pre.1 39 12/27/2024
1.3.15 188 12/27/2024
1.3.14 75 12/27/2024
1.3.13-pre.1 41 12/27/2024
1.3.12-pre.1 39 12/27/2024
1.3.11-pre.1 42 12/27/2024
1.3.10 116 12/26/2024
1.3.10-pre.1 39 12/27/2024
1.3.9 117 12/26/2024
1.3.8 75 12/26/2024
1.3.7 71 12/26/2024
1.3.6 70 12/26/2024
1.3.5 82 12/26/2024
1.3.4 84 12/26/2024
1.3.3 123 12/25/2024
1.3.2 236 12/23/2024
1.3.1 97 12/23/2024
1.3.0 70 12/23/2024
1.2.4 69 12/23/2024
1.2.3 123 12/22/2024
1.2.2 77 12/22/2024
1.2.1 95 12/22/2024
1.2.0 79 12/22/2024
1.1.57 136 12/19/2024
1.1.56 126 12/19/2024
1.1.55 157 12/17/2024
1.1.54 131 12/16/2024
1.1.53 261 12/9/2024
1.1.52 163 12/6/2024
1.1.51 177 12/5/2024
1.1.50 112 12/5/2024
1.1.49 125 12/4/2024
1.1.48 165 12/2/2024
1.1.47 81 12/2/2024
1.1.46 103 12/2/2024
1.1.45 95 12/2/2024
1.1.44 95 12/2/2024
1.1.43 108 12/1/2024
1.1.42 92 12/1/2024
1.1.41 163 12/1/2024
1.1.40 99 12/1/2024
1.1.39 129 11/30/2024
1.1.38 91 11/30/2024
1.1.37 107 11/29/2024
1.1.36 130 11/28/2024
1.1.35 137 11/27/2024
1.1.34 131 11/26/2024
1.1.33 231 11/20/2024
1.1.32 128 11/19/2024
1.1.31 152 11/15/2024
1.1.30 116 11/14/2024
1.1.29 135 11/13/2024
1.1.28 127 11/12/2024
1.1.27 136 11/11/2024
1.1.26 126 11/8/2024
1.1.25 132 11/6/2024
1.1.24 126 11/5/2024
1.1.23 135 11/4/2024
1.1.22 237 11/2/2024
1.1.21 97 11/1/2024
1.1.20 378 10/18/2024
1.1.19 319 10/9/2024
1.1.18 110 10/8/2024
1.1.17 96 10/7/2024
1.1.16 111 10/4/2024
1.1.15 198 9/25/2024
1.1.14 117 9/24/2024
1.1.13 108 9/23/2024
1.1.12 119 9/20/2024
1.1.11 119 9/19/2024
1.1.10 113 9/19/2024
1.1.9 81 9/19/2024
1.1.8 117 9/19/2024
1.1.7 158 9/18/2024
1.1.6 106 9/18/2024
1.1.5 97 9/18/2024
1.1.4 110 9/18/2024
1.1.3 153 9/14/2024
1.1.2 124 9/14/2024