Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule przedstawiono sposób uzyskiwania dostępu do plików i folderów przy użyciu interfejsów API platformy .NET w spakowanych aplikacjach WinUI. Dowiesz się, jak odczytywać i zapisywać pliki, zarządzać katalogami i dyskami oraz pracować ze strumieniami pamięci na potrzeby kodowania i dekodowania ciągów.
Aplikacje WinUI mogą korzystać z interfejsów API platformy .NET wraz z interfejsami API WinRT i Win32 w celu zapewnienia kompleksowego dostępu do systemu plików. Przykłady w tym artykule koncentrują się na System.IO przestrzeni nazw, która zapewnia podstawowe funkcje operacji dotyczących plików i katalogów.
Wymagania wstępne
- Program Visual Studio 2022 z zainstalowanym obciążeniem tworzenia aplikacji WinUI
- Spakowany projekt WinUI
- Podstawowa znajomość programowania w językach C# i .NET
Dowiesz się, czego się nauczysz
Ten artykuł obejmuje następujące zagadnienia:
- Odczytywanie i zapisywanie plików przy użyciu funkcji FileStream, BinaryWriter i BinaryReader
- Tworzenie, usuwanie katalogów i zarządzanie nimi za pomocą klas DirectoryInfo i Directory
- Pobieranie informacji o dysku przy użyciu narzędzia DriveInfo
- Kodowanie i dekodowanie ciągów za pomocą funkcji MemoryStream i StreamReader
Odczytywanie i zapisywanie plików za pomocą interfejsów API platformy .NET
W poniższym przykładzie ReadWriteFiles tworzony jest nowy plik, zapisuje zestaw liczb całkowitych w pliku, a następnie odczytuje liczby całkowite z powrotem z pliku. W przykładzie użyto klasy FileStream , aby utworzyć nowy plik i otworzyć plik do odczytu lub zapisu. W przykładzie użyto klasy BinaryWriter do zapisania liczb całkowitych w pliku i klasy BinaryReader w celu odczytania liczb całkowitych z pliku.
using System.IO;
...
ReadWriteFiles("test.bin");
...
private void ReadWriteFiles(string fileName)
{
if (File.Exists(fileName))
{
Console.WriteLine($"{fileName} already exists!");
return;
}
using (FileStream fs = new(fileName, FileMode.CreateNew))
{
using BinaryWriter writer = new(fs);
for (int i = 0; i < 11; i++)
{
writer.Write(i);
}
}
using (FileStream fs = new(fileName, FileMode.Open, FileAccess.Read))
{
using BinaryReader reader = new(fs);
for (int i = 0; i < 11; i++)
{
Console.WriteLine(reader.ReadInt32());
}
}
}
Zarządzanie dyskami i folderami na platformie .NET
W poniższym przykładzie pokazano, jak używać klas DirectoryInfo i Directory do tworzenia, usuwania folderów i zarządzania nimi. W tym przykładzie użyto DirectoryInfo klasy do utworzenia nowego katalogu, utworzenia podkatalogu i usunięcia katalogu. Klasa DirectoryInfo udostępnia metody tworzenia, przenoszenia i wyliczania za pomocą katalogów i podkatalogów. Klasa Directory udostępnia statyczne metody do tworzenia, przenoszenia i przeglądania katalogów i podkatalogów.
using System.IO;
...
private void FolderTest()
{
FolderManagement(@"c:\MyDir", "Projects");
}
private void FolderManagement(string path, string subfolderName)
{
DirectoryInfo di = new(path);
try
{
// Create directory if it doesn't exist
if (di.Exists)
{
Console.WriteLine("Path already exists.");
}
else
{
di.Create();
Console.WriteLine("The directory was created successfully.");
}
// Create subdirectory if it doesn't exist
string subfolderPath = Path.Combine(path, subfolderName);
if (Directory.Exists(subfolderPath))
{
Console.WriteLine("Subfolder path already exists.");
}
else
{
di.CreateSubdirectory(subfolderName);
Console.WriteLine("The subdirectory was created successfully.");
}
// Delete directory
di.Delete(true);
Console.WriteLine("The directory was deleted successfully.");
}
catch (Exception ex)
{
Console.WriteLine("The process failed: {0}", ex.ToString());
}
}
W tym przykładzie używana jest statyczna metoda GetDrives do pobierania informacji o wszystkich dyskach w systemie. Klasa DriveInfo zawiera informacje o dysku, takie jak typ dysku, etykieta, system plików i dostępne wolne miejsce.
using System.IO;
...
private void DriveManagement()
{
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo d in drives)
{
Console.WriteLine($"Drive name: {d.Name}");
Console.WriteLine($" Drive type: {d.DriveType}");
if (d.IsReady)
{
Console.WriteLine($" Volume label: {d.VolumeLabel}");
Console.WriteLine($" File system type: {d.DriveFormat}");
Console.WriteLine($" Space available to user: {d.AvailableFreeSpace, 15} bytes");
Console.WriteLine($" Total available space: {d.TotalFreeSpace, 15} bytes");
Console.WriteLine($" Total size of drive: {d.TotalSize, 15} bytes ");
}
}
}
Kodowanie i dekodowanie ciągów za pomocą funkcji MemoryStream
W tym przykładzie pokazano, jak za pomocą klasy MemoryStream kodować i dekodować dane ciągów. Najpierw tworzy MemoryStream, aby asynchronicznie zapisać ciąg do strumienia pamięci, a następnie odczytać ten ciąg z tego strumienia. Klasa Kodowanie służy do konwertowania ciągu na tablicę bajtów, a następnie zapisuje ciąg bajtów do strumienia pamięci.
Element StreamReader jest następnie używany do asynchronicznego odczytywania tablicy bajtów ze strumienia pamięci, a następnie konwertowania tablicy bajtów z powrotem na ciąg przez wywołanie metody ReadToEndAsync.
using System.IO;
using System.Text;
...
private async Task EncodeDecodeStringAsync(string inputData)
{
using MemoryStream stream = new();
var inputBytes = Encoding.UTF8.GetBytes(inputData);
await stream.WriteAsync(inputBytes, 0, inputBytes.Length);
stream.Seek(0, SeekOrigin.Begin);
using StreamReader reader = new(stream);
string text = await reader.ReadToEndAsync();
Console.WriteLine(text);
}
Uwaga / Notatka
Aby uzyskać informacje na temat konwertowania strumieni platformy .NET i strumieni WinRT, zobacz How to: Convert between .NET and Windows Runtime streams (Instrukcje: konwertowanie strumieni środowiska uruchomieniowego platformy .NET i środowiska uruchomieniowego systemu Windows).
Zobacz także
Windows developer