/// <summary> /// Speichert den Inhalt eines <see cref="Contact"/>-Objekts als CSV-Datei. /// </summary> /// <remarks> /// <para>Die Methode erzeugt bei jedem Aufruf eine neue CSV-Datei. Wenn Sie mehrere <see cref="Contact"/>-Objekte in einer /// gemeinsamen CSV-Datei speichern möchten, eignet sich die Methode /// <see cref="ContactPersistence.SaveCsv(string, IEnumerable{Contact?}, CsvCompatibility, IFormatProvider?, Encoding?)"/> /// oder die Erweiterungsmethode <see cref="ContactCollectionExtension.SaveCsv(IEnumerable{Contact?}, string, CsvCompatibility, IFormatProvider?, Encoding?)"/>.</para> /// <para> /// Die Methode ruft auf <paramref name="contact"/> <see cref="Contact.Clean"/> auf. Wenn /// die Eigenschaft <see cref="Contact.IsEmpty"/> von <paramref name="contact"/> danach <c>true</c> zurückgibt, wird eine leere Datei erzeugt. /// Falls es unerwünscht ist, dass die Methode <paramref name="contact"/> durch den Aufruf von <see cref="Contact.Clean"/> ändert, /// können Sie vorher mit <see cref="Contact.Clone"/> eine /// Kopie von <paramref name="contact"/> erstellen und der Methode dann die Kopie übergeben. /// </para> /// </remarks> /// <param name="contact">Das zu speichernde <see cref="Contact"/>-Objekt.</param> /// <param name="fileName">Der Dateipfad der zu erzeugenden CSV-Datei. Existiert die Datei schon, wird sie überschrieben.</param> /// <param name="platform">Die Plattform, für die die CSV-Datei bestimmt ist.</param> /// <param name="formatProvider">Ein Objekt, das kulturabhängige Formatierungsinformationen bereitstellt, oder <c>null</c>, um automatisch /// die am besten geeignete <see cref="CultureInfo"/> aussuchen zu lassen.</param> /// <param name="textEncoding">Die zu verwendende Textkodierung oder <c>null</c> für UTF-8 mit BOM (<see cref="Encoding.UTF8"/>).</param> /// <exception cref = "ArgumentNullException"><paramref name="contact"/> oder <paramref name="fileName"/> ist <c>null</c>.</exception> /// <exception cref="ArgumentException"> /// <para><paramref name="fileName"/> ist kein gültiger Dateipfad.</para> /// <para>- oder -</para> /// <para><paramref name="platform"/> hat einen nichtdefinierten Wert.</para> /// </exception> /// <exception cref="IOException">E/A-Fehler.</exception> public static void SaveCsv(this Contact contact, string fileName, CsvCompatibility platform, IFormatProvider?formatProvider = null, Encoding?textEncoding = null) { if (contact is null) { throw new ArgumentNullException(nameof(contact)); } CsvWriter.GetInstance(platform, formatProvider, textEncoding).Write(fileName, new Contact[] { contact }); }
internal static CsvReader GetInstance(CsvCompatibility platform, IFormatProvider?formatProvider, Encoding?textEncoding) => platform switch {
/// <summary> /// Speichert den Inhalt einer Sammlung von <see cref="Contact"/>-Objekten in eine CSV-Datei. /// </summary> /// /// <param name="fileName">Der Dateipfad der zu erzeugenden CSV-Datei. Existiert die Datei schon, wird sie überschrieben.</param> /// <param name="contacts"> /// <para> /// Die zu speichernde Sammlung von <see cref="Contact"/>-Objekten. /// </para> /// <para> /// Die Sammlung darf leer sein oder <c>null</c>-Werte /// enthalten. Wenn die Sammlung kein <see cref="Contact"/>-Objekt enthält, das Daten enthält, wird eine leere Datei erzeugt. /// </para> /// </param> /// <param name="platform">Die Plattform, für die die CSV-Datei bestimmt ist.</param> /// <param name="formatProvider">Ein Objekt, das kulturabhängige Formatierungsinformationen bereitstellt, oder <c>null</c>, /// um automatisch die am besten geeignete für <see cref="CultureInfo"/> aussuchen zu lassen.</param> /// <param name="textEncoding">Die zu verwendende Textkodierung oder <c>null</c> für UTF-8 mit BOM (<see cref="Encoding.UTF8"/>).</param> /// /// <remarks> /// <para> /// Die Methode ruft auf allen als Argument übergebenen <see cref="Contact"/>-Objekten <see cref="Contact.Clean"/> auf. Alle /// <see cref="Contact"/>-Objekte deren Eigenschaft <see cref="Contact.IsEmpty"/> danach <c>true</c> zurückgibt, werden nicht in /// die Datei geschrieben. /// </para> /// <para> /// Falls es unerwünscht ist, dass die Methode die <see cref="Contact"/>-Objekte durch den Aufruf von <see cref="Contact.Clean"/> ändert, /// können Sie vorher mit <see cref="Contact.Clone"/> /// Kopien der <see cref="Contact"/>-Objekte erstellen und der Methode dann die Kopien übergeben. /// </para> /// </remarks> /// /// <exception cref = "ArgumentNullException"><paramref name="fileName"/> oder <paramref name="contacts"/> ist <c>null</c>.</exception> /// <exception cref="ArgumentException"> /// <para><paramref name="fileName"/> ist kein gültiger Dateipfad.</para> /// <para>- oder -</para> /// <para><paramref name="platform"/> hat einen nichtdefinierten Wert.</para> /// </exception> /// <exception cref="IOException">E/A-Fehler.</exception> public static void SaveCsv (string fileName, IEnumerable <Contact?> contacts, CsvCompatibility platform, IFormatProvider?formatProvider = null, Encoding?textEncoding = null) => CsvWriter.GetInstance(platform, formatProvider, textEncoding).Write(fileName, contacts);
/// <summary> /// Speichert den Inhalt einer Sammlung von <see cref="Contact"/>-Objekten als CSV-Datei. /// </summary> /// /// <param name="contacts">Die zu speichernde Sammlung von <see cref="Contact"/>-Objekten.</param> /// <param name="fileName">Der Dateipfad der zu erzeugenden CSV-Datei. Existiert die Datei schon, wird sie überschrieben.</param> /// <param name="platform">Die Plattform, für die die CSV-Datei bestimmt ist.</param> /// <param name="formatProvider">Ein Objekt, das kulturabhängige Formatierungsinformationen bereitstellt, oder <c>null</c>, um automatisch /// die am besten geeignete <see cref="CultureInfo"/> aussuchen zu lassen.</param> /// <param name="textEncoding">Die zu verwendende Textkodierung oder <c>null</c> für UTF-8 mit BOM (<see cref="Encoding.UTF8"/>).</param> /// /// <remarks> /// Die Methode ruft auf jedem <see cref="Contact"/>-Objekt in <paramref name="contacts"/> <see cref="Contact.Clean"/> auf. /// </remarks> /// /// <exception cref = "ArgumentNullException"><paramref name="contacts"/> oder <paramref name="fileName"/> ist <c>null</c>.</exception> /// <exception cref="ArgumentException"> /// <para><paramref name="fileName"/> ist kein gültiger Dateipfad.</para> /// <para>- oder -</para> /// <para><paramref name="platform"/> hat einen nichtdefinierten Wert.</para> /// </exception> /// <exception cref="IOException">E/A-Fehler.</exception> public static void SaveCsv(this IEnumerable <Contact?> contacts, string fileName, CsvCompatibility platform, IFormatProvider?formatProvider = null, Encoding?textEncoding = null) => ContactPersistence.SaveCsv(fileName, contacts, platform, formatProvider, textEncoding);
/// <summary> /// Lädt den Inhalt einer CSV-Datei als <see cref="List{T}">Liste</see> von <see cref="Contact"/>-Objekten. /// </summary> /// /// <param name="fileName">Der Dateipfad der CSV-Datei.</param> /// <param name="platform">Die Plattform, von der die CSV-Datei stammt.</param> /// <param name="formatProvider">Ein Objekt, das kulturabhängige Formatierungsinformationen bereitstellt, oder <c>null</c>, /// um automatisch die am besten geeignete <see cref="CultureInfo"/> aussuchen zu lassen.</param> /// <param name="textEncoding">Die zu verwendende Textkodierung oder <c>null</c> für <see cref="Encoding.UTF8"/>.</param> /// /// <returns>Inhalt der CSV-Datei als <see cref="List{T}">Liste</see> von <see cref="Contact"/>-Objekten.</returns> /// /// <remarks>Die Methode führt auf jedem zurückgegebenen <see cref="Contact"/>-Objekt <see cref="Contact.Clean"/> aus, /// weshalb es in der Regel nicht nötig ist, <see cref="Contact.Clean"/> in eigenem Code aufzurufen.</remarks> /// /// <exception cref="ArgumentNullException"><paramref name="fileName"/> ist <c>null</c>.</exception> /// <exception cref="ArgumentException"> /// <para><paramref name="fileName"/> ist kein gültiger Dateipfad.</para> /// <para>- oder -</para> /// <para><paramref name="platform"/> hat einen nichtdefinierten Wert.</para> /// </exception> /// <exception cref="IOException"> /// <para>Es kann nicht auf den Datenträger zugegriffen werden</para> /// <para>- oder -</para> /// <para>die Datei enthält ungültiges CSV.</para> /// </exception> public static List <Contact> LoadCsv (string fileName, CsvCompatibility platform, IFormatProvider?formatProvider = null, Encoding?textEncoding = null) => CsvReader.GetInstance(platform, formatProvider, textEncoding).Read(fileName);