- Konu sahibi
- #1
İşletim sisteminin dosya seçme penceresini açmak için kullandığınız arayüz teknolojisine göre
WinForms uygulamasında aşağıdaki kodu bir butonun
Bu örnekte
Örneğin seçilen metin dosyasını okumak istiyorsanız, seçim sonucunu kontrol ettikten sonra şu işlemi yapabilirsiniz:
Bu ikinci bölüm,
WPF kullanıyorsanız sınıf adı aynı olsa da ad alanı ve dönüş değeri farklıdır. WPF için
WPF’de
Sadece belirli uzantıları göstermek için filtreyi dosya açıklaması ve uzantı deseni çiftleriyle yazın:
Birden fazla dosya seçilecekse
Bu örnekteki
Dosya seçme penceresi yalnızca kullanıcıdan bir yol alır. Dosyanın okunabilir olması, uygulamanın erişim iznine sahip olması veya içeriğin beklenen formatta bulunması otomatik olarak garanti edilmez. Dosyayı açarken
OpenFileDialog sınıfını kullanabilirsiniz. WinForms projesinde System.Windows.Forms.OpenFileDialog, WPF projesinde ise Microsoft.Win32.OpenFileDialog kullanılır. Pencereyi gösterdikten sonra sonuç DialogResult.OK veya true ise kullanıcı bir dosya seçmiştir; dosyanın yolu FileName özelliğinden alınır.Windows Forms projesinde dosya seçme
WinForms uygulamasında aşağıdaki kodu bir butonun
Click olayına veya dosya seçme işlemini başlatan başka bir metoda ekleyebilirsiniz:
C#:
using System;
using System.IO;
using System.Windows.Forms;
private void btnDosyaSec_Click(object sender, EventArgs e)
{
using (var dialog = new OpenFileDialog())
{
dialog.Title = "Bir dosya seçin";
dialog.Filter = "Metin dosyaları (*.txt)|*.txt|Tüm dosyalar (*.*)|*.*";
dialog.Multiselect = false;
dialog.CheckFileExists = true;
if (dialog.ShowDialog() == DialogResult.OK)
{
string dosyaYolu = dialog.FileName;
string dosyaAdi = Path.GetFileName(dosyaYolu);
MessageBox.Show(
$"Seçilen dosya: {dosyaAdi}\n\nYol: {dosyaYolu}",
"Dosya seçildi");
}
}
}
Bu örnekte
Filter özelliği önce .txt uzantılı dosyaları, ardından tüm dosyaları gösterir. Filtre yalnızca pencerede listelenen dosya türlerini sınırlar; dosyanın içeriğinin gerçekten beklediğiniz biçimde olduğunu kanıtlamaz. Dosyayı işleme almadan önce uzantının yanında içeriğini de doğrulamanız gerekir.ShowDialog() sonucu DialogResult.OK olduğunda kullanıcı bir dosya seçip onaylamıştır. Kullanıcı pencereyi iptal ederse sonuç Cancel olur; bu durumda FileName değerini kullanmamalı ve uygulama akışını değiştirmeden bırakmalısınız. FileName yalnızca dosyanın yolunu verir, dosyayı otomatik olarak okumaz.Örneğin seçilen metin dosyasını okumak istiyorsanız, seçim sonucunu kontrol ettikten sonra şu işlemi yapabilirsiniz:
C#:
if (dialog.ShowDialog() == DialogResult.OK)
{
string dosyaYolu = dialog.FileName;
string icerik = File.ReadAllText(dosyaYolu);
txtIcerik.Text = icerik;
}
Bu ikinci bölüm,
dialog değişkeninin hâlâ erişilebilir olduğu aynı using bloğunun içinde kullanılmalıdır. Dosya büyükse veya arayüzün donmaması gerekiyorsa dosya okuma işlemini uygun bir asenkron yöntemle veya arka plan işleminde gerçekleştirin.WPF projesinde dosya seçme
WPF kullanıyorsanız sınıf adı aynı olsa da ad alanı ve dönüş değeri farklıdır. WPF için
Microsoft.Win32.OpenFileDialog kullanılır:
C#:
using System.IO;
using Microsoft.Win32;
private void DosyaSec_Click(object sender, RoutedEventArgs e)
{
var dialog = new OpenFileDialog
{
Title = "Bir dosya seçin",
Filter = "Metin dosyaları (*.txt)|*.txt|Tüm dosyalar (*.*)|*.*",
Multiselect = false,
CheckFileExists = true
};
bool? sonuc = dialog.ShowDialog();
if (sonuc == true)
{
string dosyaYolu = dialog.FileName;
string icerik = File.ReadAllText(dosyaYolu);
MessageBox.Show($"Seçilen dosya: {Path.GetFileName(dosyaYolu)}");
}
}
WPF’de
ShowDialog() dönüşü bool? türündedir. Kullanıcı dosya seçip onaylarsa true, pencereyi kapatır veya iptal ederse false ya da null olabilir. Bu nedenle en güvenli kontrol sonuc == true biçimindedir.Dosya türü ve birden fazla dosya seçimi
Sadece belirli uzantıları göstermek için filtreyi dosya açıklaması ve uzantı deseni çiftleriyle yazın:
C#:
dialog.Filter =
"Resim dosyaları (*.png;*.jpg)|*.png;*.jpg|" +
"PDF dosyaları (*.pdf)|*.pdf|" +
"Tüm dosyalar (*.*)|*.*";
Birden fazla dosya seçilecekse
Multiselect = true ayarlanır. WinForms’ta seçilen yollar FileNames, WPF’te de FileNames özelliğinden alınır:
C#:
dialog.Multiselect = true;
if (dialog.ShowDialog() == DialogResult.OK)
{
foreach (string dosyaYolu in dialog.FileNames)
{
// Her seçilen dosya için yapılacak işlem
}
}
Bu örnekteki
DialogResult.OK kontrolü WinForms içindir. Aynı yapı WPF’te kullanılacaksa koşulu dialog.ShowDialog() == true şeklinde yazmalısınız.Dosya seçme penceresi yalnızca kullanıcıdan bir yol alır. Dosyanın okunabilir olması, uygulamanın erişim iznine sahip olması veya içeriğin beklenen formatta bulunması otomatik olarak garanti edilmez. Dosyayı açarken
FileNotFoundException, UnauthorizedAccessException veya biçime bağlı okuma hatalarını uygun şekilde ele alın; kullanıcı iptal ettiğinde ise herhangi bir dosya işlemi başlatmayın.