SimpleFileIO 0.0.6
dotnet add package SimpleFileIO --version 0.0.6
NuGet\Install-Package SimpleFileIO -Version 0.0.6
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="SimpleFileIO" Version="0.0.6" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SimpleFileIO --version 0.0.6
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SimpleFileIO, 0.0.6"
#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 SimpleFileIO as a Cake Addin #addin nuget:?package=SimpleFileIO&version=0.0.6 // Install SimpleFileIO as a Cake Tool #tool nuget:?package=SimpleFileIO&version=0.0.6
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
SimpleFileIO
Summary
SimpleFileIO is a library designed to provide a unified interface for record-based IO management. It supports the following file types and features:
- CSV: Structured data storage in CSV format.
- Appendable CSV (Log): Incremental logging directly into a CSV file.
- Text: General text file management.
- Appendable Text (Log): Incremental logging into plain text files.
This library eliminates unnecessary dependencies while maintaining flexibility and ease of use. CsvHelper is used for advanced CSV management.
Key Features
- Unified interface for multiple file types (CSV, Text, Logs).
- Modular approach.
How to
Text Log
using SimpleFileIO;
using SimpleFileIO.Utility;
using SimpleFileIO.Log.Text;
// Create Intance
PathProperty pathProperty = new PathProperty() {
RootDirectory = new DirectoryInfo("./Test"),
FileName="TestTextLog",
Extension="txtlog" };
ITextLog? returnItem = Manager.CreateTextLog("TestTextLog", pathProperty);
// Get Intance
ITextLog? getItem = Manager.GetTextLog("TestTextLog") ?? null;
// Check Invaild Intance
if (getItem is null)
throw new Exception("not create text log.");
// Add log contents
getItem.Add("aaa");
getItem.Add("bbb");
// Write
getItem.Write();
CSV Log
using CsvHelper;
using SimpleFileIO;
using SimpleFileIO.Utility;
using SimpleFileIO.Log.Csv;
// Create Intance
PathProperty pathProperty = new PathProperty() {
RootDirectory = new DirectoryInfo("./Test"),
FileName="TestCSVLog",
Extension="csvlog" };
ICSVLog? returnItem = Manager.CreateCsvLog("TestCSVLog", pathProperty);
// Get Intance
ICSVLog? getItem = Manager.GetCsvLog("TestCSVLog") ?? null;
// Check Invaild Intance
if (getItem is null)
throw new Exception("not create text log.");
// Create log Item
var data1 = new testdata();
data1.int1 = 01;
var data2 = new testdata();
data1.int2 = 02;
// Add log contents
getItem.Add(data1);
getItem.Add(data2);
// Write
getItem.Write();
using CsvHelper.Configuration;
using CsvHelper.TypeConversion;
using CsvHelper;
using CsvHelper.Configuration.Attributes;
namespace YourNamespace
{
internal class testdata
{
[Name("Int1")]
public int int1 { get; set; } = 21;
[Name("Int2")]
public int int2 { get; set; } = 22;
[Name("Int3")]
public int int3 { get; set; } = 23;
[Name("Flaot1")]
public float flaot1 { get; set; } = 25.5f;
[Name("Flaot2")]
public float flaot2 { get; set; } = 26.6f;
[Name("Flaot3")]
public float flaot3 { get; set; } = 27.7f;
[Name("String1")]
[CsvHelper.Configuration.Attributes.TypeConverter(typeof(StringArrayConverter))]
public string[] string1 { get; set; } = { "2S,9", "43424", "23443" };
[Name("String2")]
public string string2 { get; set; } = "2S,10";
[Name("String3")]
public string string3 { get; set; } = "2S,11";
}
}
//Use Custom
public class StringArrayConverter : ITypeConverter
{
public string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
{
return string.Empty;
}
// to linearization, separator character ';'
return string.Join(";", (string[])value);
}
public object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
{
if (string.IsNullOrEmpty(text))
{
return Array.Empty<string>();
}
// to array, separator character ';'
return text.Split(';');
}
}
INI State Save
using SimpleFileIO;
using SimpleFileIO.Utility;
using SimpleFileIO.State.Ini;
// Create Intance
Manager.CreateIniState("TestIni", new() { RootDirectory = new("./Test"), FileName = "TestIni", Extension = ".ini" });
// Get Intance
IINIState? iniState = Manager.GetIniState("TestIni") ?? null;
// Check Invaild Intance
if (iniState is null)
throw new Exception("not create ini.");
// Load
iniState.Load();
// Edit item contents [Section][Key][Value]
iniState.SetValue("MY", "ITEM1", "111");
iniState.SetValue("MY", "ITEM2", "222");
iniState.SetValue("YOUR", "CAR1", "333");
iniState.SetValue("YOUR", "CAR2", "444");
//Edit item content (using parser) [Section][Key][(type)Value]
iniState.SetValue_UseParser<byte>("Parser", "byte", (byte)1);
iniState.SetValue_UseParser<sbyte>("Parser", "sbyte", (sbyte)2);
iniState.SetValue_UseParser<short>("Parser", "short", (short)3);
iniState.SetValue_UseParser<ushort>("Parser", "ushort", (ushort)4);
iniState.SetValue_UseParser<int>("Parser", "int", (int)5);
iniState.SetValue_UseParser<uint>("Parser", "uint", (uint)6);
iniState.SetValue_UseParser<long>("Parser", "long", (long)7);
iniState.SetValue_UseParser<ulong>("Parser", "ulong", (ulong)8);
iniState.SetValue_UseParser<float>("Parser", "float", (float)9.9f);
iniState.SetValue_UseParser<double>("Parser", "double", (double)10.10);
iniState.SetValue_UseParser<decimal>("Parser", "decimal", (decimal)11.11);
iniState.SetValue_UseParser<char>("Parser", "char", (char)'a');
iniState.SetValue_UseParser<string>("Parser", "string", (string)"b");
iniState.SetValue_UseParser<bool>("Parser", "bool", (bool)true);
iniState.SetValue_UseParser<string[]>("Parser", "string array", new[] { "c", "d", "e", "f" });
iniState.SetValue_UseParser<PathProperty>("Parser", "path property",
new PathProperty{ RootDirectory = new DirectoryInfo("./GGGG"), FileName = "HHHH", Extension = "IIII" });
INI State Load
using SimpleFileIO;
using SimpleFileIO.Utility;
using SimpleFileIO.State.Ini;
/////////////////////////////////////////////////
// New load and check datas
IINIState? findINI = Manager.CreateIniState("TestFindIni",
new() { RootDirectory = new("./Test"), FileName = "TestIni", Extension = ".ini" });
if (findINI is null)
throw new Exception("not create ini.");
findINI.ThrowExceptionMode = true;
// load
findINI.Load();
// Get Value [Section][Key][Default]
findINI.GetValue("MY", "ITEM1", "111");
findINI.GetValue("MY", "ITEM2", "222");
findINI.GetValue("YOUR", "CAR1", "333");
findINI.GetValue("YOUR", "CAR2", "444");
// Get Value (using parser) [Section][Key][(type)Default]
var getByte = findINI.GetValue_UseParser<byte>("Parser", "byte", (byte)0);
var getSbyte = findINI.GetValue_UseParser<sbyte>("Parser", "sbyte", (sbyte)0);
var getShort = findINI.GetValue_UseParser<short>("Parser", "short", (short)0);
var getUshort = findINI.GetValue_UseParser<ushort>("Parser", "ushort", (ushort)0);
var getInt = findINI.GetValue_UseParser<int>("Parser", "int", (int)0);
var getUint = findINI.GetValue_UseParser<uint>("Parser", "uint", (uint)0);
var getLong = findINI.GetValue_UseParser<long>("Parser", "long", (long)0);
var getUlong = findINI.GetValue_UseParser<ulong>("Parser", "ulong", (ulong)0);
var getFloat = findINI.GetValue_UseParser<float>("Parser", "float", (float)0.0f);
var getDouble = findINI.GetValue_UseParser<double>("Parser", "double", (double)0.0);
var getDecimal = findINI.GetValue_UseParser<decimal>("Parser", "decimal", (decimal)0.0);
var getChar = findINI.GetValue_UseParser<char>("Parser", "char", (char)'x');
var getString = findINI.GetValue_UseParser<string>("Parser", "string", (string)"x");
var getBool = findINI.GetValue_UseParser<bool>("Parser", "bool", (bool)true);
var getStringArray = findINI.GetValue_UseParser<string[]>("Parser", "string array", new[] { "x", "x", "x", "x" });
var getPathProperty = findINI.GetValue_UseParser<PathProperty>("Parser", "path property",
new PathProperty { RootDirectory = new DirectoryInfo("./XXXX"), FileName = "XXXX", Extension = "XXXX" });
INI State Add Parser
// add parser
IINIState? parserINI = Manager.CreateIniState("TestparserIni",
new() { RootDirectory = new("./Test"), FileName = "TestIni", Extension = ".ini" });
if (parserINI is null)
throw new Exception("not create ini.");
parserINI.ThrowExceptionMode = true;
var stringTypeParser = new StringTypeParser() {
TargetType = typeof(parserTpye1),
ObjectToString = (obj) =>
{
if (obj is parserTpye1 item)
return $"{item.Name},{item.Index}";
return null;
},
StringToObject = (str) =>
{
var result = new parserTpye1();
var strArray = str.Split(',');
if (strArray.Count() is 2)
{
result.Name = strArray[0];
result.Index = Int32.Parse(strArray[1]);
}
return result;
},
};
parserINI.AddParser(typeof(parserTpye1), stringTypeParser);
var tempItem = new parserTpye1() { Name = "MYNAME", Index = 10 };
parserINI.SetValue_UseParser<parserTpye1>("Add Parser", "Parser Tpye1", tempItem);
var getItem = parserINI.GetValue_UseParser<parserTpye1>("Add Parser", "Parser Tpye1", tempItem);
internal class parserTpye1
{
internal string Name { get; set; } = "";
internal int Index { get; set; } = -1;
}
Notes
Third-Party Libraries
CsvHelper
- Version: 33.0.1
- License: Apache-2.0 OR MS-PL
- Copyright: © 2009–2024 Josh Close
- Project URL: CsvHelper Project
- Nuget: CsvHelper NuGet
- Usage:
- Used for advanced CSV parsing and serialization.
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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- CsvHelper (>= 33.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.