.NET Micro Framework: SD Hafıza Kartı Kullanımı
Multimedia cihazları ve data logger gibi uygulamalarda sıklıkla SD kart
kullanmamız gerekecektir. SD kartlar küçük boyutları ve yüksek kapasiteleri
nedeniyle tercih edilmektedir. Normal, mini ve micro SD kartların kullanımı
aynıdır ve ihtiyaca göre arzu edilen tip kart uygulamaya dahil edilebilir.
Ön Gereksinimler
Bu projeyi GHI ELectronics'in USBizi geliştirme kartıyla .NET Micro Framework 4.0
kullanarak geliştirdim. Başka model geliştirme kartı yada simulatör üzerinde
kullanmak için birkaç satırını değiştirmeniz gereksede klasör ve dosya
işlemlerinin mantığı aynıdır.
Çalışma Mantığı
.NET MF ile SD kart kullanımı, komut satırından işlem yapma mantığına benzer.
Önce çalışacağımız ana dizini belirleriz. SD Kart kullanımı için "SD" dizinini
sürücü ismi olarak düşünebilirsiniz. Daha sonra klasör oluşturma, taşıma ve
silme komutlarıyla gerekli işlemleri yapabiliriz. Örneğimizde klasör işlemlerine
ek olarak, Stream Writer ile txt dosyası oluşturup, Stream Reader ile bu dosyayı
satır satır okuyacağız.
Kullanacağınız hafıza kartında önemli verileriniz varsa projeyi denemeden önce
yedek almayı unutmayın.
Uygulama Kodları
Bir .NET Micro Framework 4 Console Application oluşturduktan sonra, proje
referanslarına aşağıdaki 5 dosyayı ekleyelim:
- System.IO.dll
- Microsoft.SPOT.IO.dll
- GHIElectronics.NETMF.IO.dll
- GHIElectronics.NETMF.USBizi.dll
- GHIElectronics.NETMF.System.dll
Daha sonra Program.cs dosyasına aşağıdaki kodları ekleyerek uygulamayı
çalıştırabilirsiniz.
using System;
using System.IO;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.IO;
using GHIElectronics.NETMF.IO;
namespace MFPersistentStorage
{
public class Program
{
static PersistentStorage ps;
public static void Main()
{
//Çıkarılabilir sürücü Event'lerini belirleyelim
RemovableMedia.Insert += RemovableMedia_Insert; //Sürücü yerleştirildiğinde
RemovableMedia.Eject += RemovableMedia_Eject; //Sürücü çıkarıldığında
ps = new PersistentStorage("SD"); //Çıkarılabilir depolama cihazı oluşturalım
ps.MountFileSystem(); //Dosya sistemini başlatalım
Thread.Sleep(Timeout.Infinite); //Main Thread'i uyutalım
}
static void RemovableMedia_Insert(object sender, MediaEventArgs e)
{
if (e.Volume.IsFormatted) //Dosya sistemi biçimlendirilmişse
{
//Klasör işlemleri
Directory.SetCurrentDirectory(@"SD"); //Çalışma klasörünü SD olarak ayarla
//Çalışma klasörünü yazdır:
Debug.Print("Çalışma Klasörü: " + Directory.GetCurrentDirectory());
Directory.CreateDirectory(@"Klasor1"); //Klasor1 klasörü oluştur
if (Directory.Exists(@"Klasor2")) //Klasor2 klasörü varsa
{
Directory.Delete(@"Klasor2"); //Klasor2 klasörünü sil
}
Directory.Move(@"Klasor1", @"Klasor2"); //Klasor1 klasörünü Klasor2'ye taşı
Debug.Print("Klasör Listesi:");
foreach (string klasor in Directory.GetDirectories(@"\SD"))
{
Debug.Print(klasor); //Tüm klasörlerin isimlerini yazdır
}
//Dosya işlemleri
if (File.Exists(@"DB.txt")) //DB.txt dosyası varsa
{
File.Delete((@"DB.txt")); //DB.txt dosyasını sil
Debug.Print("Dosya silindi.");
}
//Stream Writer kullanarak DB.txt dosyası oluştur
using (StreamWriter w = new StreamWriter(@"DB.txt"))
{
for (int i = 1; i < 6; i++)
{
w.WriteLine(i); //1'den 5'e kadar her satıra bir numara yaz
}
}
Debug.Print("Dosya oluşturuldu.");
//Stream Reader kullanarak DB.txt dosyasını oku
using (StreamReader r = new StreamReader(@"DB.txt"))
{
if (r.BaseStream.Length > 0) //Dosya doluysa
{
for (int i = 0; i < 5; i++)
{
Debug.Print(r.ReadLine()); //Her satırı yazdır
}
}
}
Debug.Print("Dosya Listesi:");
foreach (string dosya in Directory.GetFiles(@"\SD"))
{
Debug.Print(dosya); //Tüm dosyaların isimlerini yazdır
}
}
else
{
//Dosya sistemi FAT değilse kullanıcıyı uyar
Debug.Print("Dosya sistemi FAT32 yada FAT16 değil.");
}
ps.UnmountFileSystem(); //Dosya sistemini serbest bırak, SD kartı çıkarmaya hazırla
ps.Dispose(); //Kaynakları temizle
}
static void RemovableMedia_Eject(object sender, MediaEventArgs e)
{
//Dosya sistemi serbest bırakıldığında uyarı göster
Debug.Print(e.Volume.RootDirectory + " Sürücüsü çıkarıldı.");
}
}
}
Uygulamayı cihaz üzerinde çalıştırdığınızda, Visual Studio Immediate Window'da
aşağıdaki satırları göreceksiniz.
Çalışma Klasörü: \SD
Klasör Listesi:
\SD\Klasor2
Dosya silindi.
Dosya oluşturuldu.
1
2
3
4
5
Dosya Listesi:
\SD\DB.txt
\SD Sürücüsü çıkarıldı.
Immediate Window'da göreceğiniz GC ile başlayan satırlar, Garbage Collector'ın
kaynak temizliği sonrası raporlarıdır. O satırları önemsemeyin.