ktsu.AppDataStorage
1.1.45
Prefix Reserved
See the version list below for details.
dotnet add package ktsu.AppDataStorage --version 1.1.45
NuGet\Install-Package ktsu.AppDataStorage -Version 1.1.45
<PackageReference Include="ktsu.AppDataStorage" Version="1.1.45" />
paket add ktsu.AppDataStorage --version 1.1.45
#r "nuget: ktsu.AppDataStorage, 1.1.45"
// Install ktsu.AppDataStorage as a Cake Addin #addin nuget:?package=ktsu.AppDataStorage&version=1.1.45 // Install ktsu.AppDataStorage as a Cake Tool #tool nuget:?package=ktsu.AppDataStorage&version=1.1.45
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
andToStringJsonConverter
.
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 | Versions 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. |
-
net8.0
- ktsu.CaseConverter (>= 1.0.17)
- ktsu.StrongPaths (>= 1.1.31)
- ktsu.StrongStrings (>= 1.2.13)
- ktsu.ToStringJsonConverter (>= 1.0.26)
- TestableIO.System.IO.Abstractions (>= 21.1.3)
- TestableIO.System.IO.Abstractions.Wrappers (>= 21.1.3)
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 |