C# ile dosya türü oluşturma

DOTNET TURKEY FORUM/C# ile dosya türü oluşturma => Burada C# ile kendi dosya türümüzü oluşturmayı göstereceğim.. Hepinizin bildiği gibi her uygulamanın kendisine özel dosya türleri vardır, notepad

Gönderen Konu: C# ile dosya türü oluşturma  (Okunma sayısı 1220 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

  • Administrator
  • ALBAY
  • *
  • Aldığı Teşekkür: 35
  • Cinsiyet: Bay
    • http://www.dotnetturkey.com/
C# ile dosya türü oluşturma
« : 23 Temmuz 2013 20:49:44 »
Burada C# ile kendi dosya türümüzü oluşturmayı göstereceğim..

Hepinizin bildiği gibi her uygulamanın kendisine özel dosya türleri vardır, notepad text dosyaları ile çalışır, flash .fla uzantılı dosyalarla çalışır vb, kendi yazdığınız programında kendine özel bir dosya türü olmasını, bu tip dosyaların windows tarafından her zaman sizin uygulamanız ile açılmasını istiyorsanız windows’ un kayıt defteri Registry ile haşır neşir olmanız gerekiyor.

C sharp registry işlemleri yapabilmemiz için bize Microsoft.Win32 namespace ini sunmaktadır.

Registry ve RegistryKey sınıfları


Microsoft.Win32 namespace’ i içerisinde bulunan Registry ve RegistryKey classları bize kayıt defteri üzerinde istediğimiz işlemleri yapmayı sağlamaktadır.

Registry sınıfı, registry içerisindeki anahtarlara erişebilmemiz için bize aşağıdaki özellikleri sunar;


Registry.ClassesRoot; (HKEY_CLASSES_ROOT)
Registry.CurrentConfig; (HKEY_CURRENT_CONFIG)
Registry.CurrentUser; (HKEY_CURRENT_USER)
Registry.DynData; (HKEY_DYN_DATA)
Registry.LocalMachine; (HKEY_LOCAL_MACHINE)
Registry.PerformanceData; (HKEY_PERFORMANCE_DATA)
Registry.Users; (HKEY_USERS)
Bu özellikler, RegistryClass cinsinden birer nesne döndürürler, bu nesne ise her metodun ilişkili olduğu registry anahtarına referans içerir.

RegistryKey sınıfının en çok kullanılan metodları ve yaptıkları işler ise şöyledir;



RegistryKey.CreateSubKey(string subkey) parametre olarak girilen anahtarı (eğer varsa) nesne olarak döndürür, yoksa oluşturur.


RegistryKey.DeleteSubKey(string subkey) parametre olarak girilen registry anahtarını siler.


RegistryKey.GetSubKeyNames() açık olan anahtarın bütün alt anahtarlarını bir string dizisi içerisinde geri döndürür.


RegistryKey.OpenSubKey(string name) parametre olarak girilen anahtarı (eğer varsa) nesne olarak döndürür. Yoksa hata verecektir. try .. catch ile kullanılması salık verilir.


RegistryKey.GetValue(string name) açık olan anahtarın içerisinde "name" parametresinde belirtilen dize değerini object türünden bir nesne olarak geri döndürür.


RegistryKey.GetValueNames() açık olan anahtarın barındırdığı tüm dize değerlerini string dizisi içerisinde geri döndürür.


RegistryKey.SetValue(string name, object value) açık olan anahtar içerisine string parametresinde belirtilen isimde ve value parametresinde girilen değeri taşıyan yeni bir dize değeri oluşturur.

Şimdilik işimize yarayacak olanlar bunlar, tabi RegistryKey sınıfı içerisindeki diğer metod ve özellikleri de yeri geldikçe açıklayacağım.

 

Örnek uygulama


Sınıf yapılarını da tanıdığımıza göre, artık uygulamaya geçebiliriz.

Visual Studio içerisinde yeni bir Console Application projesi başlatıyoruz isim olarak RegistryApp verebilirsiniz.

Uygulamanın kodları:

//bizim programimizin iliskilendirilecegi dosya uzantisi
const string className = ".abc";
const string regIdentifier = "myOwnExt";
static string applicationPath = Environment.CommandLine;
static string iconPath = "";

[STAThread]
static void Main(string[] args)
{
//istedigimiz iconu alabilmek icin komut satiri degiskeninden //tirnaklari kaldirmali ve virgulden sonra icon indexini vermeliyiz Resimlerin Görüntülenmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
iconPath = applicationPath.Substring(0,applicationPath.LastIndexOf("\\"")) + ", 0\\"";
iconPath = iconPath.Replace("\\"","");
CreateRegistryValue(); //registry duzenlemelerini yapalim..

if(args.Length > 0)
{
printArgs(args);
}

Console.ReadLine();

}

static void printArgs(string[] argList)
{
foreach(string arg in argList)
{
Console.WriteLine("{0}",arg);
}
}

static void CreateRegistryValue()
{
//HKEY_CLASSES_ROOT’ u aciyoruz
RegistryKey regKey = Registry.ClassesRoot;
RegistryKey subKey;

//eger daha onceden yapilandirilmamis ise yapilandiriyoruz
if(!isExists(regKey,className))
{
subKey = regKey.CreateSubKey(className);
subKey.SetValue("",regIdentifier); //varsayilan dize degerini belirliyoruz
subKey.Close(); //actigimiz keyi kapatalim

//eger uzantimizin tanimlayici anahtari da yaratilmadi ise bu asamada yaratabiliriz
if(!isExists(regKey,regIdentifier))
{
subKey = regKey.CreateSubKey(regIdentifier);
//dosyamizin bilgilerinde gorunecek turunu yaziyoruz
subKey.SetValue("","Kendi dosya türümüz");

//varsayilan iconu seciyoruz
RegistryKey defaultIco = subKey.CreateSubKey("DefaultIcon");
defaultIco.SetValue("",iconPath);
defaultIco.Close();

//shell anahtarini belirliyoruz
RegistryKey shellKey = subKey.CreateSubKey("shell");
shellKey.SetValue("","open");

//shell keyi altina, open keyini tanimliyoruz
RegistryKey shellOpen = shellKey.CreateSubKey("open");
shellOpen.SetValue("","Ke&ndi uygulamam ile aç");

//son olarak open keyi altina, command keyini aciyoruz.
RegistryKey openCommand = shellOpen.CreateSubKey("command");
openCommand.SetValue("",applicationPath+" %1");

//sirayla actigimiz tum keyleri kapatiyoruz.
openCommand.Close();
shellOpen.Close();
shellKey.Close();
subKey.Close();
}
}
else
{
Console.WriteLine("Dosya uzantisi zaten iliskilendirilmis");
}
}

static bool isExists(RegistryKey key,string checkValue)
{
//aranilan keyin olup olmadigini denetliyoruz
if(key.OpenSubKey(checkValue) != null)
{
return true;
}
else
{
key.Close(); //kapatalim ki hataya sebep olmasin
return false;
}
}

Kodları tamamladıysak gelelim çalışma mantığına, uygulamamız her çalıştığında CreateRegistryValue metodunu çağırıyor, bu metod ise kabaca programımızın kayıt edeceği dosya uzantısının daha önce yaratılmış olup olmadığına bakıyor, eğer yoksa tüm düzenlemeleri ile yaratıp bizim için kullanıma hazır hale getiriyor.

 


Evet, uygulamayı tamamladığımıza göre şimdi geldik deneme safhasına.

Uygulamamızın doğru çalışıp çalışmadığını denemek için pek tabi ilk önce kendi dosyamızı oluşturmamız lazım. Bunun için açıyoruz notepad’ i ve (boş olabilir önemli değil) rastgele birşeyler karalayıp "save as" (farklı kaydet) diyoruz. Aşağıdaki şekilde dosyamızı kaydediyoruz.


Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap


Böylece C:\\ içerisinde deneme.abc adında bir dosyamız oluşturulmuş olacak.


"C# Candır."

Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo

Tags:
 

GoogleTagged




C# ile dosya türü oluşturma Konusuna Ait Benzer Konular

Folder Lock v7.2.1 - Dosya Klasör Kilitleme Programı
Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş YapFolder Lock v7.2.1 - Dosya Klasör Kilitleme ProgramıFolder Lock şi... Devamı...

Gösterim: 415 - Yanıt: 0 - Başlatan:nosso
TAŞINDI: Folder Lock v7.2.1 - Dosya Klasör Kilitleme Programı
Bu konu Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap isimli bölüme taşınmıştır.Linklerin Görülmesine İzin Veri... Devamı...

Gösterim: 410 - Yanıt: 0 - Başlatan:IIM
[Görsel Anlatım] Yandexten Sıralı Dosya Çekme
Yandex'ten Sıralı Dosya Çekme Yöntemi1- Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap adresine gidip JDownloade... Devamı...

Gösterim: 469 - Yanıt: 0 - Başlatan:nosso
C# Dosya İndirme PRogramı
private void button1_Click(object sender, EventArgs e)//indir butonuna basıldıgında        {            string url =textBox1.Tex... Devamı...

Gösterim: 652 - Yanıt: 0 - Başlatan:Neo
Kredi Dosya Masrafları iadesi
İnsanların ihtiyaçlarını karşılama konusunda yaşayacağı sıkıntıya destek olmak amacıyla bankaların müşterilerine sunmuş olduğu h... Devamı...

Gösterim: 76 - Yanıt: 0 - Başlatan:b.a.f.


         
Twittear