Przejdź do treści stopki
Iron Academy Logo
Naucz się C#
Naucz się C#

Inne Kategorie

Odczyt i zapis plików w C#

Tim Corey
24m 34s

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 duza 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, ktore 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 sa niezbędne do odczytu i zapisu plików tekstowych. Klasa File zapewnia statyczne metody do interakcji z istniejacymi plikami lub tworzenia nowych. StreamReader i StreamWriter sa powszechnie uzywane do odczytu i zapisu plikow. StreamReader odczytuje pliki linia po linii, pozwalajac na dostep do kazdej linii tekstu lub tablicy ciagow. Mozna rowniez uzyc petli while, aby efektywnie odczytac wieksze pliki. Klasa StreamWriter jest uzywana do zapisu danych do pliku, wspierajac zapis ciagow i tablic. Moze byc uzywana do dopisania tekstu do istniejacego pliku lub nadpisania calego pliku. Metody takie jak WriteLine i WriteText ulatwiaja manipulacje danymi w plikach tekstowych.

Te operacje sa zazwyczaj wykonywane w metodzie static void Main, gdzie definiujesz sciezke pliku. Na przyklad, mozesz okreslic nazwe pliku i uzyc StreamWriter, aby zapisac pojedynczy ciag lub cala tablice ciagow. Instrukcja using zapewnia, ze po operacjach plik jest poprawnie zamkniety, co zapobiega przeciekom zasobow. StreamReader moze byc rowniez uzywany do odczytu plikow linia po linii, a wyjatki moga byc obslugiwane w celu zarzadzania potencjalnymi bledami, gdy plik nie istnieje lub nie mozna go uzyskac. Te możliwosci I/O plików czynia C# doskonalym wyborem do pracy z plikami wydajnie i efektywnie.

Tim wprowadza temat, podkreślajac prostote 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żywajac 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
        }
    }
}

Wyjasnia uzycie Console.ReadLine do utrzymania otwartego okna konsoli, pozwalajac uzytkownikom na zobaczenie wyniku.

Odczyt z pliku tekstowego

Tim demonstruje, jak odczytywac z pliku tekstowego, korzystajac z metody File.ReadAllLines. Pokazuje, jak sobie radzic ze ścieżkami plików i używac 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 tablice ciagow. Tim konwertuje te tablice na liste dla łatwiejszej manipulacji.

Zapisywanie do pliku tekstowego

Tim wyjasnia, jak zapisac dane do pliku tekstowego, korzystajac z 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; }
}

Nastepnie 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 przecinkami 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 wykorzystuje symbol $ przed ciagiem oraz klamry {} do bezposredniego osadzania zmiennych w ciagu.

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 efektywna w porownaniu z tradycyjna konkatenacja przy uzyciu operatora +.

C# Odczyt i zapis plikow

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 sa przetwarzane, unikajac potencjalnych błędow w czasie wykonywania.

Dodawanie obiektow do listy

Tim demonstruje, jak dodac nowe obiekty do listy. Uzywa anonimowego wystapienia 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" });

Tworzy i inicjalizuje nowy obiekt Person w jednej linii, ktory nastepnie zostaje dodany do listy people.

Zapisywanie danych z powrotem do pliku tekstowego

Tim wyjasnia, jak zapisac 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 po liscie 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 zrozumienia i praktycznego doswiadczenia, goraco zachecam do obejrzenia filmu Tima Coreya, w ktorym glebiej omawia te pojecia z przykładami ze świata rzeczywistego.

Hero Worlddot related to Odczyt i zapis plików w C#
Hero Affiliate related to Odczyt i zapis plików w C#

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie