Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak přistupovat k souborům a složkám pomocí rozhraní .NET API v zabalených aplikacích WinUI. Naučíte se číst a zapisovat soubory, spravovat adresáře a jednotky a pracovat s datovými proudy paměti pro kódování a dekódování řetězců.
Aplikace WinUI můžou společně s rozhraními API WinRT a Win32 používat rozhraní .NET API k zajištění komplexního přístupu k systému souborů. Příklady v tomto článku se zaměřují na obor názvů System.IO , který poskytuje základní funkce pro operace se soubory a adresáři.
Požadavky
- Visual Studio 2022 s nainstalovanou úlohou vývoje aplikací WinUI
- Zabalený projekt WinUI
- Základní znalost vývoje v jazyce C# a .NET
Co se naučíte
V tomto článku se naučíte:
- Čtení a zápis souborů pomocí FileStream, BinaryWriter a BinaryReader
- Vytváření, odstraňování a správa adresářů pomocí adresářových informací a tříd adresářů
- Získání informací o jednotce pomocí DriveInfo
- Kódování a dekódování řetězců pomocí MemoryStream a StreamReader
Čtení a zápis souborů pomocí rozhraní .NET API
V následujícím příkladu ReadWriteFiles vytvoří nový soubor, zapíše do souboru sadu celých čísel a pak přečte celá čísla zpět ze souboru. Příklad používá FileStream třídu k vytvoření nového souboru a k otevření souboru pro čtení nebo zápis. Příklad používá BinaryWriter třídy k zápisu celých čísel do souboru a BinaryReader třídy ke čtení celých čísel ze souboru.
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());
}
}
}
Správa disků a složek v .NET
Následující příklad ukazuje, jak pomocí DirectoryInfo a Directory třídy vytvářet, odstraňovat a spravovat složky. Příklad používá třídu DirectoryInfo k vytvoření nového adresáře, vytvoření podadresáře a odstranění adresáře. Třída DirectoryInfo poskytuje metody pro vytváření, přesouvání a výčet adresářů a podadresářů. Třída Directory poskytuje statické metody pro vytváření, přesouvání a výčet adresářů a podadresářů.
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());
}
}
Tento příklad využívá metodu static GetDrives k získání informací o všech jednotkách v systému. Třída DriveInfo poskytuje informace o jednotce, jako je typ jednotky, popisek, systém souborů a dostupné volné místo.
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 ");
}
}
}
Kódování a dekódování řetězců pomocí MemoryStream
Tento příklad ukazuje, jak pomocí MemoryStream třídy kódovat a dekódovat řetězcová data. Nejprve vytvoří MemoryStream k asynchronnímu zápisu řetězce do datového proudu paměti a následnému čtení řetězce z datového proudu paměti. Třída Kódování slouží k převodu řetězce na pole bajtů a následné zápisu bajtového pole do datového proudu paměti.
StreamReader se pak použije k asynchronnímu čtení bajtového pole z paměťového datového proudu a následnému převodu bajtového pole zpět na řetězec voláním 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);
}
Poznámka:
Informace o převodu mezi datovými proudy .NET a datovými proudy WinRT naleznete v tématu Jak na to: Převod mezi datovými proudy .NET a datovými proudy Windows Runtime.
Viz také
Přístup k souborům a složkám pomocí sady Windows App SDK a rozhraní API WinRT
Windows developer