Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, paketlenmiş WinUI uygulamalarında .NET API'lerini kullanarak dosya ve klasörlere nasıl eriştiğiniz gösterilmektedir. Dosyaları okumayı ve yazmayı, dizinleri ve sürücüleri yönetmeyi ve dize kodlama ve kod çözme için bellek akışlarıyla çalışmayı öğreneceksiniz.
WinUI uygulamaları, kapsamlı dosya sistemi erişimi sağlamak için WinRT ve Win32 API'lerinin yanı sıra .NET API'lerini kullanabilir. Bu makaledeki örnekler, dosya ve dizin işlemleri için temel işlevselliği sağlayan System.IO ad alanına odaklanır.
Önkoşullar
- WinUI uygulama geliştirme iş yükü yüklü Visual Studio 2022
- Paketlenmiş bir WinUI projesi
- C# ve .NET geliştirme hakkında temel bilgiler
Ne öğreneceksiniz?
Bu makalede şunları yapmayı öğreneceksiniz:
- FileStream, BinaryWriter ve BinaryReader kullanarak dosyaları okuma ve yazma
- DirectoryInfo ve Directory sınıfları ile dizin oluşturma, silme ve yönetme
- DriveInfo kullanarak sürücü bilgilerini alma
- MemoryStream ve StreamReader ile dizeleri kodlama ve kodunu çözme
.NET API'leri ile dosyaları okuma ve yazma
Aşağıdaki örnekte, ReadWriteFiles yeni bir dosya oluşturur, dosyaya bir tamsayı kümesi yazar ve ardından tamsayıları dosyadan geri okur. Örnek, yeni bir dosya oluşturmak ve dosyayı okumak veya yazmak üzere açmak için FileStream sınıfını kullanır. Örnek, dosyaya tamsayıları yazmak için BinaryWriter sınıfını ve dosyadan tamsayıları okumak için BinaryReader sınıfını kullanır.
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'te sürücüleri ve klasörleri yönetme
Aşağıdaki örnekte, klasörleri oluşturmak, silmek ve yönetmek için DirectoryInfo ve Directory sınıflarının nasıl kullanılacağı gösterilmektedir. Örnek, sınıfını DirectoryInfo kullanarak yeni bir dizin oluşturur, bir alt dizin oluşturur ve dizini siler.
DirectoryInfo sınıfı dizinler ve alt dizinler aracılığıyla oluşturma, taşıma ve numaralandırma yöntemleri sağlar.
Directory sınıfı dizinleri ve alt dizinleri oluşturmak, taşımak ve numaralandırmak için statik yöntemler sağlar.
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());
}
}
Sistemdeki tüm sürücüler hakkında bilgi almak için statik GetDrives yöntemini kullanan bu örnek. DriveInfo sınıfı, sürücü türü, etiket, dosya sistemi ve kullanılabilir boş alan gibi bir sürücü hakkında bilgi sağlar.
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 ile dizeleri kodlama ve kodunu çözme
Bu örnekte, dize verilerini kodlamak ve kodunu çözmek için MemoryStream sınıfının nasıl kullanılacağı gösterilmektedir. İlk olarak bir MemoryStream bellek akışına zaman uyumsuz olarak bir dize yazmak için bir oluşturur ve ardından dizeyi bellek akışından okur.
Kodlama sınıfı, dizeyi bir bayt dizisine dönüştürmek ve ardından bayt dizisini bellek akışına yazmak için kullanılır.
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);
}
Uyarı
.NET akışları ile WinRT akışları arasında dönüştürme hakkında bilgi için bkz . Nasıl yapılır: .NET ve Windows Çalışma Zamanı akışları arasında dönüştürme.
Ayrıca bakınız
Windows Uygulama SDK'sı ve WinRT API'leri ile dosya ve klasörlere erişme
Windows Uygulama SDK'sı ile dosyalar, klasörler ve kitaplıklar
Windows developer