FlatFile is a library to work with flat files (work up-to 100 times faster then FileHelpers)
You should install FlatFile with NuGet:
Install-Package FlatFile
You should install FlatFile.Delimited with NuGet:
Install-Package FlatFile.Delimited
You should install FlatFile.Delimited.Attributes with NuGet:
Install-Package FlatFile.Delimited.Attributes
You should install FlatFile.FixedLength with NuGet:
Install-Package FlatFile.FixedLength
You should install FlatFile.FixedLength.Attributes with NuGet:
Install-Package FlatFile.FixedLength.Attributes
This commands from Package Manager Console will download and install FlatFile and all required dependencies.
Name | Milliseconds | Percent |
---|---|---|
FileHelperEngine.WriteStream | 5175 | 11266.8% |
FlatFileEngine.Write | 45 | 100% |
Name | Milliseconds | Percent |
---|---|---|
FileHelperEngine.ReadStream | 7636 | 2764.4% |
FlatFileEngine.Read | 276 | 100% |
Name | Milliseconds | Percent |
---|---|---|
FileHelperEngine.WriteStream | 17246 | 838.4% |
FlatFileEngine.Write | 2057 | 100% |
Name | Milliseconds | Percent |
---|---|---|
FileHelperEngine.WriteStream | 17778 | 1052.5% |
FlatFileEngine.Write | 1689 | 100% |
Name | Milliseconds | Percent |
---|---|---|
CsvWriter.WriteRecords | 26578 | 7988.8% |
FlatFileEngine.Write | 332 | 100% |
Name | Milliseconds | Percent |
---|---|---|
CsvWriter.WriteRecords | 18795 | 3190.5% |
FlatFileEngine.Write | 589 | 100% |
public sealed class DelimitedSampleRecordLayout : DelimitedLayout<FixedSampleRecord>
{
public DelimitedSampleRecordLayout()
{
this.WithDelimiter(";")
.WithQuote("\"")
.WithMember(x => x.Cuit)
.WithMember(x => x.Nombre)
.WithMember(x => x.Actividad, c => c.WithName("AnotherName"));
}
}
public sealed class FixedSampleRecordLayout : FixedLayout<FixedSampleRecord>
{
public FixedSampleRecordLayout()
{
this.WithMember(x => x.Cuit, c => c.WithLenght(11))
.WithMember(x => x.Nombre, c => c.WithLenght(160))
.WithMember(x => x.Actividad, c => c.WithLenght(6));
}
}
public class LayoutFactory
{
public IDelimitedLayout<TestObject> GetLayout()
{
IDelimitedLayout<TestObject> layout = new DelimitedLayout<TestObject>()
.WithDelimiter(";")
.WithQuote("\"")
.WithMember(o => o.Id)
.WithMember(o => o.Description)
.WithMember(o => o.NullableInt, set => set.AllowNull("=Null"));
return layout;
}
}
public class LayoutFactory
{
public IFixedLayout<TestObject> GetLayout()
{
IFixedLayout<TestObject> layout = new FixedLayout<TestObject>()
.WithMember(o => o.Id, set => set
.WithLenght(5)
.WithLeftPadding('0'))
.WithMember(o => o.Description, set => set
.WithLenght(25)
.WithRightPadding(' '))
.WithMember(o => o.NullableInt, set => set
.WithLenght(5)
.AllowNull("=Null")
.WithLeftPadding('0'));
return layout;
}
using FlatFile.Delimited.Attributes;
[DelimitedFile(Delimiter = ";", Quotes = "\"")]
public class TestObject
{
[DelimitedField(1)]
public int Id { get; set; }
[DelimitedField(2)]
public string Description { get; set; }
[DelimitedField(3, NullValue = "=Null")]
public int? NullableInt { get; set; }
}
using FlatFile.FixedLength;
using FlatFile.FixedLength.Attributes;
[FixedLengthFile]
public class TestObject
{
[FixedLengthField(1, 5, PaddingChar = '0')]
public int Id { get; set; }
[FixedLengthField(2, 25, PaddingChar = ' ', Padding = Padding.Right)]
public string Description { get; set; }
[FixedLengthField(2, 5, PaddingChar = '0', NullValue = "=Null")]
public int? NullableInt { get; set; }
}
var layout = new FixedSampleRecordLayout();
var factory = new FixedLengthFileEngineFactory();
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(FixedFileSample)))
{
var flatFile = factory.GetEngine<FixedSampleRecord>(layout);
var records = flatFile.Read(stream).ToArray();
}
var factory = new FixedLengthFileEngineFactory();
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(FixedFileSample)))
{
var flatFile = factory.GetEngine<FixedSampleRecord>();
var records = flatFile.Read(stream).ToArray();
}
var sampleRecords = GetRecords();
var layout = new FixedSampleRecordLayout();
var factory = new FixedLengthFileEngineFactory();
using (var stream = new MemoryStream())
{
var flatFile = factory.GetEngine<FixedSampleRecord>(layout);
flatFile.Write(stream, sampleRecords);
}
var sampleRecords = GetRecords();
var factory = new FixedLengthFileEngineFactory();
using (var stream = new MemoryStream())
{
var flatFile = factory.GetEngine<FixedSampleRecord>();
flatFile.Write(stream, sampleRecords);
}