Bagikan melalui


Mengakses file dan folder dengan SDK Aplikasi Windows dan .NET

Aplikasi SDK Aplikasi Windows yang dikemas dapat memanfaatkan API .NET untuk membaca dan menulis file, bekerja dengan folder, serta membaca informasi drive dan volume. Selain itu, aplikasi desktop paket apa pun dapat menggunakan API WinRT dan Win32 di Windows SDK, serta API yang disediakan di .NET SDK. Artikel ini menyediakan panduan tentang cara menggunakan .NET System.IO API untuk membaca dan menulis file, mengelola drive dan folder, dan bekerja dengan aliran memori untuk mengodekan atau mendekode data string.

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. Contoh 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 kelas DirectoryInfo dan Directory untuk membuat, menghapus, dan mengelola folder. Contoh menggunakan DirectoryInfo kelas untuk membuat direktori baru, membuat subdirektori, dan menghapus direktori. Kelas ini DirectoryInfo menyediakan metode untuk membuat, memindahkan, dan menghitung melalui direktori dan subdirektori. Kelas ini Directory 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. Ini pertama-tama MemoryStream membuat untuk menulis string secara asinkron ke aliran memori dan kemudian membaca string dari aliran memori. Kelas Pengodean digunakan untuk mengonversi string menjadi array byte lalu menulis array byte 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);
}

Catatan

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 API SDK Aplikasi Windows dan WinRT

File, folder, dan pustaka dengan SDK Aplikasi Windows