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

Inne Kategorie

Opanowanie systemu plików C#

Tim Corey
35m 07s

C# oferuje solidne funkcje do interakcji z systemem plików, umożliwiając zadania takie jak manipulacja plikami, zarządzanie katalogami i pobieranie informacji. W swoim filmie, "Praca z systemem plików w C# - Zarządzanie katalogami i plikami", Tim Corey bada podstawy pracy z plikami i katalogami za pomocą C#.

Niniejszy artykuł ma na celu dostarczenie kompleksowego przeglądu operacji systemu plików w C#, uwzględniając kluczowe techniki automatyzacji zadań, zarządzania katalogami i obsługi plików.

Wprowadzenie

W C#, przestrzeń nazw System.IO zapewnia potężne klasy do interakcji z systemem plików. Te klasy, takie jak File, FileInfo, Directory i DirectoryInfo, umożliwiają wykonanie różnych operacji na plikach, takich jak tworzenie plików, odczyt danych, zapis do plików i sprawdzanie, czy dany plik już istnieje w określonej ścieżce. Korzystając z tych klas, można pracować z plikami tekstowymi, binarnymi i plikami o różnych rozszerzeniach. Metody takie jak Create(), Exists() i Delete() pozwalają programistom efektywnie zarządzać plikami i katalogami.

Na przykład klasa File zawiera metody statyczne do sprawdzania, czy plik już istnieje, tworzenia nowego pliku lub otwierania plików w różnych trybach (takich jak odczyt, zapis lub dopisywanie). Możesz też użyć klasy FileInfo, aby uzyskać więcej informacji o pliku, takich jak czas jego utworzenia lub pełna ścieżka. Klasa DirectoryInfo umożliwia pracę z katalogami, pobieranie plików lub tworzenie nowych katalogów. Te klasy i metody zapewniają elastyczność w obsłudze zarówno istniejących plików, jak i nowych plików, zarządzaniu wieloma plikami, a nawet obsłudze danych plików na poziomie bajtów, czyniąc C# potężnym narzędziem do operacji na systemie plików.

Tim zaczyna od podkreślenia potężnych funkcji C# do automatyzacji zadań związanych z plikami, takich jak tworzenie kopii zapasowych, organizowanie plików i pobieranie informacji o plikach. Przedstawia film, mówiąc o swoim celu, jakim jest ułatwienie nauki C# poprzez praktyczne przykłady i zasoby szkoleniowe.

Tworzenie aplikacji konsolowej demonstracyjnej

Tim zaczyna od podstaw, tworząc nową aplikację konsolową o nazwie "FileSystemDemo" korzystając z .NET Framework. Podkreśla wybór .NET Framework zamiast .NET Core do tej demonstracji.

using System;
using System.IO;

namespace FileSystemDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }
}
using System;
using System.IO;

namespace FileSystemDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }
}

Ustawianie ścieżki głównej

Tim konfiguruje zmienną ścieżki głównej wskazującą na określony katalog w swoim systemie na potrzeby demo.

string rootPath = @"C:\temp\demos\filesystem";
string rootPath = @"C:\temp\demos\filesystem";

Wyjaśnia, że symbol @ pozwala na używanie odwrotnych ukośników w ścieżce bez potrzeby ich ucieczki.

Odczytywanie wszystkich katalogów w ścieżce

Tim pokazuje, jak pobrać wszystkie katalogi w podanej ścieżce głównej, korzystając z metody Directory.GetDirectories.

string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
    Console.WriteLine(directory);
}
string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
    Console.WriteLine(directory);
}

Ten kod drukuje pełne ścieżki wszystkich podkatalogów w katalogu głównym.

Lista katalogów

Rekurencyjne odczytywanie podkatalogów

Aby uwzględnić podkatalogi w wyszukiwaniu, Tim dodaje wzorzec wyszukiwania i opcje wyszukiwania do metody GetDirectories.

string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
    Console.WriteLine(directory);
}
string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
    Console.WriteLine(directory);
}

Ta modyfikacja zapewnia, że wszystkie zagnieżdżone podkatalogi są uwzględnione w wyszukiwaniu.

Odczytywanie wszystkich plików w ścieżce

Tim pokazuje, jak pobrać wszystkie pliki w klasie katalogu i podanej ścieżce głównej, korzystając z metody Directory.GetFiles.

string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
    Console.WriteLine(file);
}
string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
    Console.WriteLine(file);
}

Ten kod drukuje pełne ścieżki wszystkich plików w katalogu głównym i jego podkatalogach.

Lista plików

Wyodrębnianie nazw i ścieżek plików

Tim wyjaśnia, jak wyodrębnić nazwy plików i ścieżki za pomocą klasy Path. Obejmuje to uzyskanie nazwy pliku bez rozszerzenia i nazwy katalogu każdego pliku.

foreach (string file in files)
{
    Console.WriteLine(Path.GetFileName(file)); // File name with extension
    Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
    Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}
foreach (string file in files)
{
    Console.WriteLine(Path.GetFileName(file)); // File name with extension
    Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
    Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}

Ten fragment kodu demonstruje, jak wyodrębnić i wydrukować różne części tego samego pliku w określonej ścieżce.

Pobieranie informacji o plikach

Tim o godzinie (12:10) demonstruje, jak uzyskać szczegółowe informacje o pliku przy użyciu klasy FileInfo. Obejmuje to uzyskanie rozmiaru pliku, czasu ostatniego dostępu, czasu utworzenia i innych atrybutów.

foreach (string file in files)
{
    FileInfo info = new FileInfo(file);
    Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}
foreach (string file in files)
{
    FileInfo info = new FileInfo(file);
    Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}

Ten fragment kodu drukuje nazwę pliku i jego rozmiar w bajtach. Tim wspomina, że można zamienić ten rozmiar na kilobajty lub megabajty dzieląc przez 1024 wielokrotnie.

Dalej wyjaśnia, że klasa FileInfo oferuje inne przydatne właściwości:

  • LastWriteTime: Ostatnia modyfikacja pliku.

  • LastAccessTime: Ostatni dostęp do pliku.

  • CreationTime: Czas utworzenia pliku.

  • Attributes: Atrybuty pliku, takie jak tylko do odczytu lub archiwalny.

Automating File System Tasks with C

Tim w (15:11) omawia, jak korzystać z C# do automatyzacji różnych zadań w systemie plików. Może to obejmować tworzenie katalogów, weryfikację istnienia plików lub katalogów oraz inne powtarzalne zadania.

Weryfikacja istnienia katalogu

Tim pokazuje, jak sprawdzić, czy katalog istnieje, używając metody Directory.Exists. Jest to przydatne, aby upewnić się, że niezbędne katalogi są na miejscu przed wykonaniem operacji.

string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
    Console.WriteLine("Directory exists");
}
else
{
    Console.WriteLine("Directory does not exist");
}
string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
    Console.WriteLine("Directory exists");
}
else
{
    Console.WriteLine("Directory does not exist");
}

Ten kod sprawdza, czy katalog istnieje i drukuje odpowiednią wiadomość.

Tworzenie nowego katalogu

Tim wyjaśnia, jak utworzyć nowy katalog za pomocą metody Directory.CreateDirectory. Ta metoda tworzy wszystkie katalogi i podkatalogi w określonej ścieżce, jeśli jeszcze nie istnieją.

string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");
string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");

Tim pokazuje, że ta metoda tworzy określoną ścieżkę i jej podkatalogi bez nadpisywania istniejących plików lub katalogów.

Kopiowanie plików

Tim o godzinie (21:35) demonstruje, jak skopiować pliki z jednego katalogu do drugiego za pomocą metody File.Copy. Może to być przydatne do tworzenia kopii zapasowych plików lub organizowania plików w różnych folderach.

string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Copy(file, destFile, true);
}
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Copy(file, destFile, true);
}

W tym przykładzie pliki są kopiowane z katalogu głównego do subfolderA, a istniejące pliki są zastępowane dzięki parametrowi true.

Zmiana nazw plików podczas kopiowania

Tim pokazuje również, jak zmieniać nazwy plików podczas procesu kopiowania przy użyciu pętli for z indeksem.

for (int i = 0; i < files.Length; i++)
{
    string destFile = Path.Combine(destinationFolder, $"{i}.txt");
    File.Copy(files[i], destFile, true);
}
for (int i = 0; i < files.Length; i++)
{
    string destFile = Path.Combine(destinationFolder, $"{i}.txt");
    File.Copy(files[i], destFile, true);
}

Ten kod kopiuje pliki do katalogu docelowego i sekwencyjnie zmienia ich nazwy na 0.txt, 1.txt itd.

Obsługa nadpisywania plików

Tim wyjaśnia, jak obsługiwać istniejące pliki bez ich nadpisywania i unikać wyjątków przez ustawienie parametru overwrite na false. Zapobiega to nadpisywaniu istniejących plików i zgłasza wyjątek, jeśli plik już istnieje.

try
{
    File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
    Console.WriteLine($"File already exists: {ex.Message}");
}
try
{
    File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
    Console.WriteLine($"File already exists: {ex.Message}");
}

To podejście pomaga w bezpiecznym zarządzaniu kopiami plików i obsłudze sytuacji, w których pliki nie powinny być nadpisywane.

Przenoszenie plików

Tim o godzinie (28:28) demonstruje, jak przenieść pliki za pomocą metody File.Move. W przeciwieństwie do File.Copy, metoda File.Move nie ma opcji nadpisywania i zgłasza wyjątek, jeśli plik docelowy już istnieje.

string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Move(file, destFile);
}
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Move(file, destFile);
}

Ten kod przenosi pliki z katalogu głównego do subfolderA i usuwa je z katalogu źródłowego.

Tworzenie aplikacji użytkowych

Tim zachęca deweloperów do myślenia o różnych sposobach, w jakie mogą korzystać z C# do automatyzacji zadań systemu plików i tworzenia aplikacji użytkowych. Sugeruje rozpoczynanie od prostych zadań i stopniowe budowanie bardziej złożonych rozwiązań automatyzacji.

Przykłady aplikacji użytkowych:

  • Czyszczenie tymczasowych plików: Automatyzacja procesu usuwania plików tymczasowych, aby zwolnić miejsce.

  • Kopie zapasowe na zewnętrznych dyskach: Utworzenie narzędzia do tworzenia kopii zapasowych, które kopiuje ważne pliki na zewnętrzny dysk.

  • Synchronizacja folderów projektów: Synchronizacja folderów projektów między komputerem a pamięcią USB, gwarantując, że najnowsze zmiany są zawsze zapisywane i przywracane.

Wnioski

Eksploracja Tim Coreya dotycząca operacji systemu plików w C# dostarcza praktycznych informacji dotyczących automatyzacji zadań związanych z plikami i zarządzania katalogami. Podążając za jego przykładami, deweloperzy mogą skutecznie automatyzować rutynowe zadania zarządzania plikami i tworzyć własne aplikacje użytkowe.

Aby uzyskać głębsze zrozumienie i zobaczyć te koncepcje w działaniu, gorąco zachęcam do obejrzenia pełnego filmu Tim Coreya o systemie plików w C#. Jego szczegółowe instrukcje i praktyczne przykłady pomogą wzmocnić Twoje rozumienie i umożliwią Ci budowę własnych aplikacji do zarządzania plikami.

Hero Worlddot related to Opanowanie systemu plików C#
Hero Affiliate related to Opanowanie systemu plikó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!

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie