wmismail Posted August 10, 2008 Share Posted August 10, 2008 Bu uygulamamızda kullanacağımız namespaceler: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Management; using System.Globalization; Ayrıca splitter, mainmenu, menuitem, treeview, listview, ve imagelist gibi kontroller de kullanacağız. Farklı ve çok yararlı bir makale olacağına inanıyorum. Öncelikle aşağıdaki görüntüyü oluşturmanız gerekiyor. My Computer’ın yazdığı kısımdaki resimleri image liste atarak çağırıyoruz. Bu tip resimleri Windows’un kendi sistem dosyalarından bulabileceğiniz gibi arama motorlarından da faydalanabilirsiniz. Şimdi ise kodlarımıza gelelim. Kodlar uzun olduğundan dolayı iyi takip etmeniz ve anlayabilmeniz gerekmektedir. Açıkçası ben zor bir noktası olduğunu sanmıyorum. Zira her kodun açıklaması satır aralarında mutlaka yer alacaktır. Ancak her türlü durumda mail atarak benden yardım alabilirsiniz. Şimdi kod bölümünüze geçelim: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Management; using System.Globalization; namespace My_Explorer { public class Explorer : System.Windows.Forms.Form { private System.Windows.Forms.Splitter splitter1; private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem menuItem2; private System.Windows.Forms.MenuItem menuItem3; private System.Windows.Forms.MenuItem menuItem4; private System.Windows.Forms.TreeView tvFolders; private System.Windows.Forms.ListView lvFiles; private System.Windows.Forms.ImageList m_imageListTreeView; private System.ComponentModel.IContainer components; public Explorer() { InitializeComponent(); PopulateDriveList(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } [sTAThread] static void Main() { Application.Run(new Explorer()); } //Bu prosedürde treeviewin içeriğini listeliyoruz private void PopulateDriveList() { TreeNode nodeTreeNode; int imageIndex = 0; int selectIndex = 0; const int Removable = 2; const int LocalDisk = 3; const int Network = 4; const int CD = 5; this.Cursor = Cursors.WaitCursor; // TreeView’i temizliyoruz tvFolders.Nodes.Clear(); nodeTreeNode = new TreeNode("My Computer",0,0); tvFolders.Nodes.Add(nodeTreeNode); //Nod koleksiyonunu tanımlıyoruz TreeNodeCollection nodeCollection = nodeTreeNode.Nodes; //Ve şimdi sürücü listemizi oluşturuyoruz ManagementObjectCollection queryCollection = getDrives(); foreach ( ManagementObject mo in queryCollection) { switch (int.Parse( mo["DriveType"].ToString())) { case Removable: //removable drives imageIndex = 5; selectIndex = 5; break; case LocalDisk: //Local drives imageIndex = 6; selectIndex = 6; break; case CD: //CD rom drives imageIndex = 7; selectIndex = 7; break; case Network: //Network drives imageIndex = 8; selectIndex = 8; break; default: //defalut to folder imageIndex = 2; selectIndex = 3; break; } //Yeni bir sürücü nodu oluşturuyoruz nodeTreeNode = new TreeNode(mo["Name"].ToString() + "\\" ,imageIndex,selectIndex); //Yeni bir nod tanımlıyoruz nodeCollection.Add(nodeTreeNode); } //Nodlarda çeşitli başlıklar simgelenecektir //Buna en güzel örnek program files. //Örnegin program files tiklandiktan sonra soldaki listview’e //Program filesin tüm icerigi gelecektir InitListView(); this.Cursor = Cursors.Default; } private void tvFolders_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { //Hangi dosya secildiyse //O dosyanin icerigini gerekli yere listeliyoruz this.Cursor = Cursors.WaitCursor; //Seçilen dosya yada sürücüyü listeliyoruz TreeNode nodeCurrent = e.Node; //Tüm alt dosyaları temizliyoruz nodeCurrent.Nodes.Clear(); if (nodeCurrent.SelectedImageIndex == 0) { //Bilgisayarım secildikten sonra //Daha önce yazdigimiz prosedürün calismasini saglayip //Sürücü ve dosyaların gelmesini saglıyoruz PopulateDriveList(); } else { //Burada ise alt dosyaların görüntülenmesini saglıyoruz PopulateDirectory(nodeCurrent, nodeCurrent.Nodes); } this.Cursor = Cursors.Default; } protected void InitListView() { //Listviewin icerigini temizliyoruz lvFiles.Clear(); //Listview’in kolon baslıklarını tanımlıyoruz lvFiles.Columns.Add("Name",150,System.Windows.Forms.HorizontalAlignment.Left); lvFiles.Columns.Add("Size",75, System.Windows.Forms.HorizontalAlignment.Right); lvFiles.Columns.Add("Created", 140, System.Windows.Forms.HorizontalAlignment.Left); lvFiles.Columns.Add("Modified", 140, System.Windows.Forms.HorizontalAlignment.Left); } protected void PopulateDirectory(TreeNode nodeCurrent, TreeNodeCollection nodeCurrentCollection) { TreeNode nodeDir; int imageIndex = 2; int selectIndex = 3; if (nodeCurrent.SelectedImageIndex != 0) { //treeviewlere klasörler yerlestiriliyor try { //dosya yolları kontrol ediliyor if(Directory.Exists(getFullPath(nodeCurrent.FullPath)) == false) { MessageBox.Show("Directory or path " + nodeCurrent.ToString() + " does not exist."); } else { //dosyalar yerlestiriliyor PopulateFiles(nodeCurrent); string[] stringDirectories = Directory.GetDirectories(getFullPath(nodeCurrent.FullPath)); string stringFullPath = ""; string stringPathName = ""; //yolların adresleri atanıyor foreach (string stringDir in stringDirectories) { stringFullPath = stringDir; stringPathName = GetPathName(stringFullPath); //adresler icin yeni nodlar olusturuluyor nodeDir = new TreeNode(stringPathName.ToString(),imageIndex,selectIndex); nodeCurrentCollection.Add(nodeDir); } } } catch (IOException e) { MessageBox.Show("Error: Drive not ready or directory does not exist."); } catch (UnauthorizedAccessException e) { MessageBox.Show("Error: Drive or directory access denided."); } catch (Exception e) { MessageBox.Show("Error: " + e); } } } protected string GetPathName(string stringPath) { //klasör isimleri getiriliyor string[] stringSplit = stringPath.Split('\\'); int _maxIndex = stringSplit.Length; return stringSplit[_maxIndex-1]; } protected void PopulateFiles(TreeNode nodeCurrent) { //dosyalar treeviewe baglaniyor string[] lvData = new string[4]; //liste temizleniyor InitListView(); if (nodeCurrent.SelectedImageIndex != 0) { //dosya yollari tekrar kontrol ediliyor if(Directory.Exists((string) getFullPath(nodeCurrent.FullPath)) == false) { MessageBox.Show("Directory or path " + nodeCurrent.ToString() + " does not exist."); } else { try { string[] stringFiles = Directory.GetFiles(getFullPath(nodeCurrent.FullPath)); string stringFileName = ""; DateTime dtCreateDate, dtModifyDate; Int64 lFileSize = 0; //tüm dosyalar baglanıyor foreach (string stringFile in stringFiles) { stringFileName = stringFile; FileInfo objFileSize = new FileInfo(stringFileName); lFileSize = objFileSize.Length; dtCreateDate = objFileSize.CreationTime; dtModifyDate = objFileSize.LastWriteTime; //listviewedeki tüm veriler olusturuluyor lvData[0] = GetPathName(stringFileName); lvData[1] = formatSize(lFileSize); //dosyalar son kaydedilme yerlerine göre olusturuluyor if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(dtCreateDate) == false) { //dosyaları son haliyle olusturuluyor lvData[2] = formatDate(dtCreateDate.AddHours(1)); } else { // dosyalar son kaydedilme yerlerine göre olusturuluyor lvData[2] = formatDate(dtCreateDate); } //dosyaların en son ne zaman olusturulduguna bakılıyor if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(dtModifyDate) == false) { dosyalar son kaydedilme yerlerine göre olusturuluyor lvData[3] = formatDate(dtModifyDate.AddHours(1)); } else { // dosyalar son kaydedilme yerlerine göre olusturuluyor lvData[3] = formatDate(dtModifyDate); } //gercek dosya yolları olusturuluyor ListViewItem lvItem = new ListViewItem(lvData,0); lvFiles.Items.Add(lvItem); } } catch (IOException e) { MessageBox.Show("Error: Drive not ready or directory does not exist."); } catch (UnauthorizedAccessException e) { MessageBox.Show("Error: Drive or directory access denided."); } catch (Exception e) { MessageBox.Show("Error: " + e); } } } } protected string getFullPath(string stringPath) { //tüm dosya yolları belirleniyor string stringParse = ""; //bilgisayarımın yolu siliniyor stringParse = stringPath.Replace("My Computer\\", ""); return stringParse; } protected ManagementObjectCollection getDrives() { //tüm sürücüler belirleniyor ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); ManagementObjectCollection queryCollection = query.Get(); return queryCollection; } protected string formatDate(DateTime dtDate) { //kucuk formatta tarih belirleniyor string stringDate = ""; stringDate = dtDate.ToShortDateString().ToString() + " " + dtDate.ToShortTimeString().ToString(); return stringDate; } protected string formatSize(Int64 lSize) { //format numarasi 0 kb olarak belirleniyor string stringSize = ""; NumberFormatInfo myNfi = new NumberFormatInfo(); Int64 lKBSize = 0; if (lSize < 1024 ) { if (lSize == 0) { //0 byte stringSize = "0"; } else { //1 kb’den daha az stringSize = "1"; } } else { // KB’ye cevriliyor lKBSize = lSize / 1024; //format numaralari default ayarlarina ceviriliyor stringSize = lKBSize.ToString("n",myNfi); //decimallar siliniyor stringSize = stringSize.Replace(".00", ""); } return stringSize + " KB"; } private void menuItem2_Click(object sender, System.EventArgs e) { //uygulamadan cikiliyor this.Close(); } } } Tüm kodlarımız açıklamalarıyla birlikte bu şekilde oluşturuluyor. Eğer iyi takip ettiyseniz çalıştırdıktan sonra oluşması gereken görüntü şu şekilde olmalı: İşe yarar, c#.net konusunda pratik dünyamızı genişleten ve geliştiren bir makale olduğuna inanıyorum. Farklı makalelerde tekrar görüşmek üzere. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.