از کلاس FileInfo میتوان برای انجام عملیات های مختلف بر روی یک فایل فیزیکی استفاده کرد. در این فصل با کلاس FileInfo و چند کلاس مفید دیگر آشنا خواهیم شد.
FileInfo
در فصل قبل یاد گرفتید که چطور عملیات مختلفی را بر روی یک فایل فیزیکی با استفاده از کلاس استاتیک File انجام دهید. در این فصل از کلاس FileInfo
برای انجام عملیات ورودی و خروجی بر روی یک فایل فیزیکی استفاده میکنیم. کلاس FileInfo همچون کلاس File قابلیت عملیات بر روی فایل ها را برای ما فراهم می آورد. با این حال با استفاده از کلاس استاتیک FileInfo می توان کنترل بیشتری بر روی عملیات خواندن و نوشتن اعمال کرد.
نمونه مثال زیر نشان میدهد که چطور میتوان بایت ها را از یک فایل خوانده و سپس آنها را به یک رشته با فرمت UTF۸
تبدیل کرد :
//Create object of FileInfo for specified path
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//Open file for Read\Write
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
//create byte array of same size as FileStream length
byte[] fileBytes = new byte[fs.Length];
//define counter to check how much bytes to read. Decrease the counter as you read each byte
int numBytesToRead = (int)fileBytes.Length;
//Counter to indicate number of bytes already read
int numBytesRead = 0;
//iterate till all the bytes read from FileStream
while (numBytesToRead > 0)
{
int n = fs.Read(fileBytes, numBytesRead, numBytesToRead);
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
//Once you read all the bytes from FileStream, you can convert it into string using UTF8 encoding
string filestring = Encoding.UTF8.GetString(fileBytes);
همانطور که در کد نمونه مثال بالا مشاهده می کنید شما باید برای خواندن و نوشتن یک رشته از یک FileStream
کد زیادی را بنویسید. عملیات خواندن و نوشتن میتواند به روش ساده تری با استفاده از کلاس StreamReader
و StreamWriter
انجام بگیرد.
نمونه مثال زیر نشان می دهد که چطور StreamReader کار خواندن رشته را از یک فایل ساده میکند:
//Create object of FileInfo for specified path
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//Open file for Read\Write
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read , FileShare.Read);
//Create object of StreamReader by passing FileStream object on which it needs to operates on
StreamReader sr = new StreamReader(fs);
//Use ReadToEnd method to read all the content from file
string fileContent = sr.ReadToEnd();
//Close StreamReader object after operation
sr.Close();
fs.Close();
دقت داشته باشید که ()fi.Open
سه پارامتر دارد : پارامتر اول FileMode بوده که با مقدار OpenOrCreate اگر فایلی موجود نباشد آن را ایجاد و باز می کند، پارامتر دوم ، FileAccess ، به عملیات خواندن اشاره دارد و پارامتر سوم برای به اشتراک گذاشتن فایل به منظور خواندن دیگر کاربران (زمانی که فایل باز است) اشاره دارد.
نمونه مثال زیر نشان می دهد که چطور کلاس StreamWriter
عملیات نوشتن رشته در یک فایل را ساده کرده است :
//Create object of FileInfo for specified path
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//Open file for Read\Write
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read );
//Create StreamWriter object to write string to FileSream
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Another line from streamwriter");
sw.Close();
عملیات خواندن و نوشتن به طور همزمان برای یک شی FileStream
امکان پذیر نیست. اگر شما از قبل در حال خواندن فایلی باشید ، یک شیء FileStream جداگانه برای نوشتن در همان فایل ایجاد کنید :
//Create FileInfo object for DummyFile.txt
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//open DummyFile.txt for read operation
FileStream fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite , FileShare.ReadWrite);
//open DummyFile.txt for write operation
FileStream fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
//get the StreamReader
StreamReader sr = new StreamReader(fsToRead);
//read all texts using StreamReader object
string fileContent = sr.ReadToEnd();
sr.Close();
//get the StreamWriter
StreamWriter sw = new StreamWriter(fsToWrite);
//write some text using StreamWriter
sw.WriteLine("Another line from streamwriter");
sw.Close();
//close all Stream objects
fsToRead.Close();
fsToWrite.Close();
همانطور که در این مقاله مشاهده نمودید می توانید از کلاس FileInfo
، StreamReader
و StreamWriter
برای خواندن و نوشتن از یک فایل فیزیکی استفاده کنید.