Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

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.
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.
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();
}
}
}Imports System
Imports System.IO
Namespace FileSystemDemo
Module Program
Sub Main(args As String())
Console.ReadLine()
End Sub
End Module
End NamespaceTim konfiguruje zmienną ścieżki głównej wskazującą na określony katalog w swoim systemie na potrzeby demo.
string rootPath = @"C:\temp\demos\filesystem";Dim rootPath As String = "C:\temp\demos\filesystem"Wyjaśnia, że symbol @ pozwala na używanie odwrotnych ukośników w ścieżce bez potrzeby ich ucieczki.
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);
}Dim directories As String() = Directory.GetDirectories(rootPath)
For Each directory As String In directories
Console.WriteLine(directory)
NextTen kod drukuje pełne ścieżki wszystkich podkatalogów w katalogu głównym.

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);
}Dim allDirectories As String() = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories)
For Each directory As String In allDirectories
Console.WriteLine(directory)
NextTa modyfikacja zapewnia, że wszystkie zagnieżdżone podkatalogi są uwzględnione w wyszukiwaniu.
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);
}Dim files As String() = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories)
For Each file As String In files
Console.WriteLine(file)
NextTen kod drukuje pełne ścieżki wszystkich plików w katalogu głównym i jego podkatalogach.

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
}For Each file As String 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
NextTen fragment kodu demonstruje, jak wyodrębnić i wydrukować różne części tego samego pliku w określonej ścieżce.
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");
}For Each file As String In files
Dim info As New FileInfo(file)
Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes")
NextTen 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.
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.
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");
}Dim newPath As String = "C:\temp\demos\filesystem\subfolderC"
If Directory.Exists(newPath) Then
Console.WriteLine("Directory exists")
Else
Console.WriteLine("Directory does not exist")
End IfTen kod sprawdza, czy katalog istnieje i drukuje odpowiednią wiadomość.
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");Dim newPath As String = "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.
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);
}Dim files As String() = Directory.GetFiles(rootPath)
Dim destinationFolder As String = Path.Combine(rootPath, "subfolderA")
For Each file As String In files
Dim destFile As String = Path.Combine(destinationFolder, Path.GetFileName(file))
File.Copy(file, destFile, True)
NextW tym przykładzie pliki są kopiowane z katalogu głównego do subfolderA, a istniejące pliki są zastępowane dzięki parametrowi true.
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 i As Integer = 0 To files.Length - 1
Dim destFile As String = Path.Combine(destinationFolder, $"{i}.txt")
File.Copy(files(i), destFile, True)
NextTen kod kopiuje pliki do katalogu docelowego i sekwencyjnie zmienia ich nazwy na 0.txt, 1.txt itd.
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 ex As IOException
Console.WriteLine($"File already exists: {ex.Message}")
End TryTo podejście pomaga w bezpiecznym zarządzaniu kopiami plików i obsłudze sytuacji, w których pliki nie powinny być nadpisywane.
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);
}Dim files As String() = Directory.GetFiles(rootPath)
Dim destinationFolder As String = Path.Combine(rootPath, "subfolderA")
For Each file As String In files
Dim destFile As String = Path.Combine(destinationFolder, Path.GetFileName(file))
File.Move(file, destFile)
NextTen kod przenosi pliki z katalogu głównego do subfolderA i usuwa je z katalogu źródłowego.
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.
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.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy