MCTS - Input/Output (IO) - Dosya İşlemleri

2.    Input/Output (IO) - Dosya İşlemleri

 

Bu yazıda aşağıdaki kavramlara kısaca değineceğiz. File,FileInfo,Directory,DirectoryInfo, DriveInfo,DriveType, FileSystemInfo,Path,FileSystemWatcher

FileSystemInfo sınıfı IO işlemleri için base sınıftır.

Bir dosyaya erişmek
FileInfo fi = new FileInfo("SystemIO.txt");

if (fi.Exists)

{

   string text=String.Format("{0} - {1}",fi.Name,fi.FullName);

   richTextBox1.Text = text;

}

Bir dizindeki dosyaları listelemek
DirectoryInfo directory = new DirectoryInfo(@"C:");

foreach (FileInfo item in directory.GetFiles())

{

     lstFiles.Items.Add(item.Name);

}

 

 

Diskteki Sürücüleri listelemek(c,d,e,..)
DriveInfo[] drives = DriveInfo.GetDrives();

foreach (DriveInfo item in drives)

{

    lstDrivers.Items.Add(item.Name+ " - "+item.DriveType.ToString());

}

FileSystemWatcher
bir dizinde meydana gelen değişiklikleri izlemeye yardımcı olur.

FileSystemWatcher fsw = new FileSystemWatcher(@"C:");

fsw.Created+=new FileSystemEventHandler(fsw_Created);

fsw.Changed+=new FileSystemEventHandler(fsw_Changed);

fsw.EnableRaisingEvents = true;

Bir data işlemi söz konusu olduğunda bunları memory de stream denilen ve Stream sınıfından türemiş sınıflar kullanılır.Bunlar:
FileStream,MemoryStream,CryptoStream,NetworkStream,GZipStream

Bir streamin sonuna byte arrayi ekleyen metod
       
void AppendDataToStream(Stream stream, byte[] data)

        {

            //Streamde pozisyonu sona getir

            stream.Position = stream.Length;

            //Byte dizisini streame ekle

            stream.Write(data, 0, data.Length);

        }

File sınıfı okuma veya yazma işlemleri için bir dosyayı açmaya ve kapamaya yarar.
FileStream file = File.Open("SystemIO.txt", FileMode.Open, FileAccess.Read);

StreamReader streamReader = new StreamReader(file);

lblText.Text = streamReader.ReadToEnd();

streamReader.Close();

veya bu işi tek satırda da halledebiliriz.

lblText.Text = File.ReadAllText("SystemIO.txt");

BinaryReader ve BinaryWriter bir dosyaya veriyi binary olarak işlemek ve geri binary olarak okumak için kullanılır. Binary olarak yazılan bir dosya ancak binary olarak geri okunabilir.
FileStream newFile = File.Open("SystemIO.bin", FileMode.OpenOrCreate);

BinaryReader reader = new BinaryReader(newFile);

long number = reader.ReadInt64();

byte[] bytes = reader.ReadBytes(4);

string s = reader.ReadString();

reader.Close();

MemoryStreams hafızada oluşturulan stream nesneleridir.Bir streami fiziksel olarak bir yerlere kaydetmeden önce memory de saklayabiliriz.

MemoryStream stream = new MemoryStream();

//Once memory e bilgiler yazilir

StreamWriter writer = new StreamWriter(stream);

writer.Write("Hello");

writer.Write("GoodBye");

writer.Flush();

//Memory deki bilgiler dosyaya kaydedilir.

FileStream file = File.Create(@"MemoryStrem.txt");

stream.WriteTo(file);

writer.Close();

file.Close();

stream.Close();



 

BuffuredStream direk olarak bir streamlere yazıp okurken performansı artırmak için kullanılır.

FileStream newFile = File.Create(@"buffered.txt");

BufferedStream buffered = new BufferedStream(newFile);

StreamWriter writer = new StreamWriter(buffered);

writer.WriteLine("some data");

writer.Close();;

Sorular:
- FileStremin pozition propertisini hangi metod etkiler
Read,Write,Seek metodları

 

Compressing Streams:
Streamleri sıkıştırmak için .NET te 2 yöntem mevcuttur. GZip ve Deflate.
Peki hangisini kullanmalıyız. İkiside aynı algoritmayı kullanmaktadır. GZip ile sıkıştırılan bir stream gzip aracıyla açılabilir. Sıkıştırma ve açma işlemleri sadece kendi sisteminiz içerisinde olacaksa Deflate biraz daha fazla sıkıştırma yaptığı için tercih edilebilir. Fakat sıkıştırılan dosyayı dağıtacaksanız Gzip kullanılmalıdır.

FileStream sourceFile = File.OpenRead("SystemIO.txt");

FileStream destFile = File.Create("SystemIO");

 

Stream compStream = new GZipStream(destFile, CompressionMode.Compress);

 

if (rbGzip.Checked)

{

    compStream = new GZipStream(destFile, CompressionMode.Compress);

}

else if (rbDeflate.Checked)

{

    compStream = new DeflateStream(destFile, CompressionMode.Compress);

}

int theByte = sourceFile.ReadByte();

while (theByte != -1)

{

    compStream.WriteByte((byte)theByte);

    theByte = sourceFile.ReadByte();

}

Isolated Storage : Bir kullanıcıyı full yetkili olarak bir programı kullandırmak güvenlik zaafiyetlerine yol açabilmektedir. Bir kullanıcıya limitli erişim vermek için isolated storage’ler kullanılır. Isolated Storage ler kullanıcı bilgilerini güvenli bir ortamda saklamayı sağlarlar. En önemli avantajı da işletim sisteminde partial,limited veya full-trust çalışılmasının önemli olmamasıdır.
İlk önce saklayacağınız verinin skobunu belirlemeniz gerekiyor.

Assembly/Machine : Bu metod çağrılan assembly e ve makineye özgüdür. Application- Level Data için uygundur.

//Bu storage sadece çağıran assembly e özgüdür.Bu bir windows form uygulaması

//olabileceği gibi bir DLL de olabilir.

IsolatedStorage machineStorage = IsolatedStorageFile.GetMachineStoreForAssembly();


Assembly/User : Bu metod çağrılan assembly e ve kullanıcıya özgüdür. User Level Data için uygundur.


Aşağıdaki user bazlı storage e okuma ve yazma örneği yapılmıştır.

IsolatedStorageFile userStorage = IsolatedStorageFile.GetUserStoreForAssembly();

//Bu storage çağıran kullanıcıya özgüdür.Personalization

//Önce isole edilecek dosya olusturulur

           

//Sonrada isole edilmiş stream olusturulur ve dosya bu streame eklenir.

IsolatedStorageFileStream userStream = new IsolatedStorageFileStream("UserSettings.set", FileMode.Create,userStorage);

 //Stream writer ile yazılır.

 StreamWriter writer = new StreamWriter(userStream);

writer.WriteLine("Kullanici Bilgileri");

writer.Close();
//Okuma
IsolatedStorageFileStream userStream = new IsolatedStorageFileStream("UserSettings.set",FileMode.Open,userStorage);

string[] files = userStorage.GetFileNames("UserSettings.set");

for (int i = 0; i < files.Length; i++)

{

    MessageBox.Show(files[i]);

}

Isolated Storage’da dizin oluşturma:
IsolatedStorageFileStream userStream = new IsolatedStorageFileStream(@"DizinUserSettings.set",FileMode.Create,userStorage);

string[] directories = userStorage.GetDirectoryNames("Dizin");

if (directories.Length == 0)

{

    userStorage.CreateDirectory("Dizin");

}

Yorum Yaz
Arkadaşların Burada !
Arkadaşların Burada !