---
title: Write an EDI interchange file
summary: Serialise an IEdiFile's segments into a single-line EDI text file.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-15
library: SAIF.Framework.Common.Files
reference_type: package
operation_id: OP-09
trigger: Caller calls EdiFileBuilder.Write(file)
---

# Write an EDI interchange file

`EdiFileWriter.Write` orders an `IEdiFile`'s segments and serialises each through [Serialise segments and elements](serialise-segments-and-elements.md), producing a single, `~`-terminated line that overwrites any existing file at the target path.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-09 |
| **Trigger** | Caller request via `EdiFileBuilder.Write(file)`. |
| **Inputs** | `IEdiFile`. |
| **Outputs** | A single-line EDI text file at `Path`. |
| **Primary components** | `EdiFileWriter.Write` |
| **Entry point** | `Common\SAIF.Common.Files\Edi\Core\Writers\EdiFileWriter.cs` |

## Steps

1. Order `file.Segments` by `Index` ([BR-031](../business-rules.md#br-031-every-added-segment-receives-the-next-sequential-index)).
2. For each segment, call `EdiRecordBuilder.BuildSegmentRecord(rec.DataElements)` and append `~` ([BR-027](../business-rules.md#br-027-skipped-element-ordinals-preserved-with-placeholders)).
   > **Origin**: Step 2 delegates to `EdiRecordBuilder.BuildSegmentRecord`, documented fully in [Serialise segments and elements](serialise-segments-and-elements.md).
3. `System.IO.File.WriteAllText(Path, filedata)` — the entire interchange is written as one physical line, overwriting any existing file ([BR-037](../business-rules.md#br-037-edi-interchange-written-as-a-single-line-overwriting-existing-file)).

## Process flow

```mermaid
flowchart TD
	Start(["Caller: EdiFileBuilder.Write(file)"]) --> Order["Order file.Segments by Index"]
	Order --> Loop[For each segment]
	Loop --> Build["EdiRecordBuilder.BuildSegmentRecord +<br>append ~"]
	Build --> More{More segments?}
	More -->|Yes| Loop
	More -->|No| WriteFile["File.WriteAllText (overwrite)"]
	WriteFile --> EndOk([Single-line EDI file written])
```

## Failure and edge-case behavior
- Writing to a path that already contains a file overwrites it without warning or backup, because `File.WriteAllText` truncates the existing file ([BR-037](../business-rules.md#br-037-edi-interchange-written-as-a-single-line-overwriting-existing-file)).
- The output file has no physical line breaks; consumers that expect one segment per line must re-wrap the text themselves.

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)

## Sources
- Common\SAIF.Common.Files\Edi\Core\Writers\EdiFileWriter.cs
- Common\SAIF.Common.Files\Edi\Core\Builders\EdiRecordBuilder.cs
- Common\SAIF.Common.Files\Edi\EdiFile.cs
