Bagikan melalui


Mengakses file dan folder dengan Windows App SDK dan .NET

Artikel ini memperlihatkan kepada Anda cara mengakses file dan folder menggunakan API .NET di aplikasi WinUI yang dikemas. Anda akan belajar membaca dan menulis file, mengelola direktori dan drive, dan bekerja dengan aliran memori untuk pengodean dan dekode string.

Aplikasi WinUI dapat menggunakan API .NET bersama API WinRT dan Win32 untuk menyediakan akses sistem file yang komprehensif. Contoh dalam artikel ini berfokus pada namespace System.IO , yang menyediakan fungsionalitas inti untuk operasi file dan direktori.

Prasyarat

  • Visual Studio 2022 dengan beban kerja pengembangan aplikasi WinUI terinstal
  • Proyek WinUI yang dikemas
  • Pemahaman dasar tentang pengembangan C# dan .NET

Apa yang akan Anda pelajari

Dalam artikel ini, Anda akan mempelajari cara:

Membaca dan menulis file dengan API .NET

Dalam contoh berikut, ReadWriteFiles membuat file baru, menulis sekumpulan bilangan bulat ke file, lalu membaca bilangan bulat kembali dari file. Contohnya menggunakan kelas FileStream untuk membuat file baru dan membuka file untuk membaca atau menulis. Contoh menggunakan kelas BinaryWriter untuk menulis bilangan bulat ke file dan kelas BinaryReader untuk membaca bilangan bulat dari file.

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

Mengelola drive dan folder di .NET

Contoh berikut menunjukkan cara menggunakan DirectoryInfo dan Directory kelas untuk membuat, menghapus, dan mengelola folder. Contoh menggunakan kelas DirectoryInfo untuk membuat direktori baru, membuat subdirektori, dan menghapus direktori. Kelas DirectoryInfo menyediakan metode untuk membuat, memindahkan, dan menghitung melalui direktori dan subdirektori. Kelas menyediakan metode statis untuk membuat, memindahkan, dan menghitung melalui direktori dan subdirektori.

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

Contoh ini menggunakan metode GetDrives statis untuk mengambil informasi tentang semua drive pada sistem. Kelas DriveInfo menyediakan informasi tentang drive, seperti jenis drive, label, sistem file, dan ruang kosong yang tersedia.

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

Mengodekan dan mendekode string dengan MemoryStream

Contoh ini menunjukkan cara menggunakan kelas MemoryStream untuk mengodekan dan mendekode data string. Pertama-tama membuat MemoryStream untuk menulis string secara asinkron ke aliran memori lalu membaca string dari aliran memori. Kelas Encoding digunakan untuk mengonversi string ke array byte dan kemudian menulis array byte tersebut ke aliran memori. StreamReader kemudian digunakan untuk membaca array byte secara asinkron dari aliran memori lalu mengonversi array byte kembali ke string dengan memanggil 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);
}

Nota

Untuk informasi tentang mengonversi antara aliran .NET dan aliran WinRT, lihat Cara: Mengonversi antara aliran .NET dan Windows Runtime.

Lihat juga

Mengakses file dan folder dengan Windows App SDK dan WinRT API

File, folder, dan pustaka koleksi dengan Windows App SDK