Odczyt i zapis plików w C#
Operacje wejścia/wyjścia (I/O) plików w C# są nieodłączną częścią wielu aplikacji programowych, pozwalając deweloperom na efektywny odczyt i zapis plików. Bez wzgledu na to, czy przechowujesz dane, rejestrujesz zdarzenia aplikacji, czy przetwarzasz duża ilosc tekstu lub danych binarnych, C# oferuje solidne narzędzia do pracy z plikami. W filmie Tima Coreya, "C# Data Access: Text Files", oferuje szczegółowy przewodnik po tych operacjach na plikach, skupiajac sie na użyciu plików tekstowych do przechowywania i pobierania danych. Niniejszy artykuł ma na celu podsumowanie kluczowych pojec i technik, które Tim omawia w filmie, dostarczając praktycznych wskazowek dotyczących operacji I/O plików w C#.
Wprowadzenie
W C#, operacje wejscia i wyjscia na plikach są niezbędne do odczytu i zapisu plików tekstowych. Klasa File udostepnia metody statyczne do interakcji z istniejącymi plikami lub tworzenia nowych. StreamReader i StreamWriter są zazwyczaj używane do odczytu i zapisu plików. StreamReader czyta pliki linijka po linijce, umożliwiajac dostep do kazdej linii tekstu lub tablicy ciagow. Możesz również użyć petli while do wydajnego odczytu wiekszych plików. Klasa StreamWriter jest używana do zapisywania danych do pliku, wspiera zapisywanie ciagow i tablic. Można jej używać do dodawania tekstu do istniejącego pliku lub nadpisywania całego pliku. Metody takie jak WriteLine i WriteText ulatwiaja manipulacje danymi w plikach tekstowych.
Te operacje są zwykle wykonywane w ramach metody static void Main, gdzie definiujesz sciezke pliku. Na przykład, możesz okreslic nazwe pliku i użyć StreamWriter do zapisania pojedynczego ciągu lub całej tablicy ciagow. Instrukcja using zapewnia, ze plik jest poprawnie zamkniety po operacjach, zapobiegając wyciekom zasobów. StreamReader może być również używany do odczytu plików linijka po linijce, a wyjątki mogą być obsługiwane do zarządzania potencjalnymi bledami, gdy plik nie istnieje lub nie można go otworzyć. Te możliwości I/O plików czynia C# doskonalym wyborem do pracy z plikami wydajnie i efektywnie.
Tim wprowadza temat, podkreślając prostotę odczytu i zapisu plików tekstowych w C#. Demonstruje, jak kilka linijek kodu może wykonac te zadania, czyniac pliki tekstowe realna opcja do przechowywania danych.
Tworzenie aplikacji konsolowej demonstracyjnej
Tim rozpoczyna od stworzenia nowej aplikacji konsolowej nazwanej "TextFileDataAccessDemo" używając Visual Studio.
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace TextFileDataAccessDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine(); // Keeps the console window open to view the output
}
}
}
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace TextFileDataAccessDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine(); // Keeps the console window open to view the output
}
}
}
Wyjaśnia użycie Console.ReadLine do utrzymania otwartosci okna konsoli, pozwalając użytkownikom zobaczyć wynik.
Odczyt z pliku tekstowego
Tim demonstruje, jak odczytywać z pliku tekstowego za pomoca metody File.ReadAllLines. Pokazuje, jak sobie radzic ze ścieżkami plików i używać literałow ciagow, aby uniknąć znakow ucieczki.
string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();
string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();
Metoda File.ReadAllLines odczytuje wszystkie linie z okreslonego pliku i zwraca je jako tablica ciagow. Tim konwertuje te tablice na liste dla łatwiejszej manipulacji.
Zapisywanie do pliku tekstowego
Tim wyjaśnia, jak zapisywac dane do pliku tekstowego za pomoca metody File.WriteAllLines. Demonstruje, jak dodawac nowe linie do listy i zapisywac zaktualizowana liste z powrotem do pliku.
lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);
lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);
Ten kod dodaje nowy wpis do listy i zapisuje cała liste z powrotem do pliku.
Tworzenie modelu danych i jego wypelnianie z pliku
Tim tworzy klase Person, aby reprezentowac strukture danych dla kazdego wpisu w pliku tekstowym.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
}
Następnie odczytuje plik i wypelnia liste obiektow Person.
List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
string[] entries = line.Split(',');
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
string[] entries = line.Split(',');
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
Ten kod odczytuje kazda linie, dzieli ja wedlug przecinkow i tworzy obiekt Person z wyodrebnionymi danymi.
Interpolacja ciagow
Tim wprowadza interpolacje ciagow, funkcje w C# 6.0, która upraszcza proces łączenia zmiennych i ciagow. Ta metoda używa symbolu $ przed ciągiem i nawiasow klamrowych {} do osadzenia zmiennych bezpośrednio w ciągu.
foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}
foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}
Ta skladnia jest bardziej zwiezla i wydajna w porownaniu do tradycyjnej konkatenacji za pomoca operatora +.

Walidacja danych
Tim podkreśla znaczenie walidacji danych podczas odczytu z pliku tekstowego. Zwraca uwage na ryzyko zakladania struktury danych i zaleca sprawdzanie dlugosci podzielonych wpisow.
foreach (string line in lines)
{
string[] entries = line.Split(',');
if (entries.Length == 3)
{
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
else
{
// Handle error
Console.WriteLine("Invalid data format.");
}
}
foreach (string line in lines)
{
string[] entries = line.Split(',');
if (entries.Length == 3)
{
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
else
{
// Handle error
Console.WriteLine("Invalid data format.");
}
}
To zapewnia, ze tylko linie z poprawna liczba wpisow są przetwarzane, unikajac potencjalnych błędów w czasie wykonywania.
Dodawanie obiektow do listy
Tim demonstruje, jak dodawac nowe obiekty do listy. Używa anonimowej instancji klasy Person, aby dodac nowa osobe do listy.
people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });
people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });
To tworzy i inicjalizuje nowy obiekt Person w jednej linii, który jest następnie dodawany do listy people.
Zapisywanie danych z powrotem do pliku tekstowego
Tim wyjaśnia, jak zapisywac liste obiektow Person z powrotem do pliku tekstowego. Konwertuje liste obiektow Person na liste ciagow, gdzie kazdy ciag reprezentuje linie w pliku.
List<string> output = new List<string>();
foreach (var person in people)
{
output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);
List<string> output = new List<string>();
foreach (var person in people)
{
output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);
Ten kod iteruje przez liste people, tworzy ciag CSV dla kazdego obiektu Person i zapisuje liste ciagow do pliku.
Wnioski
Szczegolowy przewodnik Tima Coreya na temat operacji I/O plików w C# dostarcza praktycznych wskazowek dotyczących odczytu i zapisu plików tekstowych. Podazajac za jego przykładami, deweloperzy mogą skutecznie zarządzać danymi za pomoca plików tekstowych i wdrazac solidne rozwiązania do przechowywania danych. Dla glebszego zrozumieniuiuiuiuia i praktycznego doswiadczenia, goraco zachecam do obejrzenia filmu Tima Coreya, w którym glebiej omawia te pojecia z przykładami ze świata rzeczywistego.
