다음을 통해 공유


Windows App SDK 및 .NET를 사용하여 파일 및 폴더에 액세스

패키지된 Windows 앱 SDK 앱은 파일 읽기 및 쓰기, 폴더 작업, 드라이브 및 볼륨 정보 읽기에 .NET API를 활용할 수 있습니다. 또한 패키지된 모든 데스크톱 앱은 Windows SDK의 WinRT 및 Win32 API와 .NET SDK에 제공된 API를 모두 활용할 수 있습니다. 이 문서에서는 .NET System.IO API를 사용하여 파일을 읽고 쓰고, 드라이브 및 폴더를 관리하고, 메모리 스트림을 사용하여 문자열 데이터를 인코딩하거나 디코딩하는 방법에 대한 지침을 제공합니다.

.NET API를 사용하여 파일 읽기 및 쓰기

다음 예제에서 ReadWriteFiles은(는) 새 파일을 만들고, 정수 집합을 파일에 쓴 다음, 파일에서 정수를 다시 읽습니다. 이 예제에서는 FileStream 클래스를 사용하여 새 파일을 만들고 파일을 읽거나 쓰기 위해 엽니다. 이 예제에서는 BinaryWriter 클래스를 사용하여 파일에 정수 및 BinaryReader 클래스를 사용하여 파일에서 정수를 읽습니다.

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

.NET에서 드라이브 및 폴더 관리

다음 예제에서는 DirectoryInfo디렉터리 클래스를 사용하여 폴더를 만들고 삭제하고 관리하는 방법을 보여 줍니다. 이 예제에서는 DirectoryInfo 클래스를 사용하여 새 디렉터리를 만들고, 하위 디렉터리를 만들고, 디렉터리를 삭제합니다. DirectoryInfo 클래스는 디렉터리와 하위 디렉터리에서 만들기, 이동 및 열거를 위한 정적 메서드를 노출합니다. Directory 클래스는 디렉터리와 하위 디렉터리에서 만들기, 이동 및 열거를 위한 정적 메서드를 노출합니다.

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

이 예제에서는 정적 GetDrives 메서드를 사용하여 시스템의 모든 드라이브에 대한 정보를 검색합니다. DriveInfo 클래스는 드라이브 유형, 레이블, 파일 시스템 및 사용 가능한 여유 공간과 같은 드라이브에 대한 정보를 제공합니다.

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

MemoryStream을 사용하여 문자열 인코딩 및 디코딩

이 예제에서는 MemoryStream 클래스를 사용하여 문자열 데이터를 인코딩하고 디코딩하는 방법을 보여줍니다. 먼저 메모리 스트림에 문자열을 비동기적으로 쓰는 MemoryStream을(를) 만든 다음 메모리 스트림에서 문자열을 읽습니다. 인코딩 클래스는 문자열을 바이트 배열로 변환한 다음 바이트 배열을 메모리 스트림에 쓰는 데 사용됩니다. 그런 다음 StreamReader를 사용하여 메모리 스트림에서 바이트 배열을 비동기적으로 읽은 다음 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);
}

참고 항목

.NET 스트림과 WinRT 스트림 간 변환에 대한 자세한 내용은 .NET 스트림과 Windows 런타임 스트림 간 변환하는 방법을 참조하세요.

참고 항목

Windows App SDK 및 WinRT API를 사용하여 파일 및 폴더에 액세스

Windows App SDK가 포함된 파일, 폴더 및 라이브러리