Udostępnij przez


Uzyskiwanie dostępu do plików i folderów przy użyciu zestawu SDK aplikacji systemu Windows i platformy .NET

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 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);
}

Zobacz także

Uzyskiwanie dostępu do plików i folderów za pomocą zestawu SDK aplikacji systemu Windows i interfejsów API WinRT

Pliki, foldery i biblioteki z Windows App SDK