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ą wykonywanie różnorodnych operacji na plikach, takich jak tworzenie plików, odczytywanie danych, zapisywanie 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ą deweloperom skutecznie 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 (np. do odczytu, zapisu czy dopisywania). Możesz także używać klasy FileInfo, aby uzyskiwać więcej informacji o pliku, takich jak czas jego utworzenia czy pełna ścieżka. Klasa DirectoryInfo pozwala na 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życie ukośników w ścieżce bez potrzeby ich unikania.

Odczytywanie wszystkich katalogów w ścieżce

Tim pokazuje, jak pobrać wszystkie katalogi w określonej ścieżce głównej przy użyciu 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 katalogowej i określonej ścieżce głównej przy użyciu 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 w (12:10) pokazuje, jak pobrać szczegółowe informacje o pliku za pomocą 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 zapewnia inne przydatne właściwości:

  • LastWriteTime: Ostatni czas modyfikacji pliku.

  • LastAccessTime: Ostatni czas dostępu do pliku.

  • CreationTime: Czas utworzenia pliku.

  • Attributes: Atrybuty pliku, takie jak tylko do odczytu czy archiwum.

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 przy użyciu 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 przy użyciu 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 w (21:35) pokazuje, jak kopiować pliki z jednego katalogu do innego używając 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ą nadpisywane ze względu na parametr 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 zmienia ich nazwy kolejno na 0.txt, 1.txt, itp.

Obsługa nadpisywania plików

Tim wyjaśnia, jak obsługiwać istniejące pliki bez nadpisywania i unikać wyjątków poprzez ustawienie parametru nadpisania 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 w (28:28) pokazuje, jak przenosić pliki przy użyciu 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 zrozumieniuiuiuiuie 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!

Zespol wsparcia Iron

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