با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با دوره کامل آموزش #C در خدمت شما دوستان هستیم . در قسمت قبل با کلاس File و کاربرد آن در #C آشنا شدید. در این جلسه قصد داریم شما را با کلاس FileInfo در #C که یکی دیگر از کلاس ها برای کار با فایل های فیزیکی است ، آشنا کنیم.
کلاس FileInfo همان کارایی کلاس استاتیک File را دارد، اما شما می توانید با استفاده از دستورالعمل خواندن و نوشتن روی فایل ها، کنترل بیشتری روی خواندن و نوشتن داشته باشید و اینکار ها را بصورت دستی انجام دهید.
توضیحات | پراپرتی |
یک نمونه از دایرکتوری اصلی را دریافت می کند. | Directory |
که مسیر کامل دایرکتوری را نشان می دهد | DirectoryName |
نشان می دهد که آیا یک فایل وجود دارد یا خیر. | Exists |
فرمت فایل را نشان می دهد. | Extension |
مسیر کامل دایرکتوری یا فایل را دریافت می کند. | FullName |
نشان می دهد و یا تعیین می کند که آیا فایل مورد نظر فقط خواندن است یا خیر. | IsReadOnly |
دریافت یا تنظیم زمان آخرین دسترسی فایل یا دایرکتوری مورد نظر | LastAccessTime |
زمانی که فایل یا دایرکتوری فعلی برای آخرین بار نوشته شد، را تعیین کرده یا آن را برمی گرداند. | LastWriteTime |
اندازه فایل مورد نظر را بصورت bytes، برمی گرداند. | Length |
نام فایل را برمی گرداند. | Name |
توضیحات | نام متد |
StreamWriter را ایجاد کرده و متن را به فایل مورد نظر می افزاید. | AppendText |
یک فایل موجود را در یک فایل جدید کپی می کند و همنین دوباره نویسی فایل موجود را غیر مجاز می کند. | CopyTo |
ایجاد فایل | Create |
توسط StreamWriter یک فایل متنی جدید را ایجاد می کند. | CreateText |
رمزگشایی یک فایل که توسط حساب جاری با استفاده از متد Encrypt رزمگذاری شده است. | Decrypt |
حذف فایل مورد نظر | Delete |
رمزگذاری یک فایل به طوری که فقط حساب کاربری مورد استفاده برای رمزگذاری فایل می تواند آن را رمزگشایی کند. | Encrypt |
یک شی FileSecurity می گیرد که مقادیر ورودی کنترل دسترسی (ACL) برای یک فایل مشخص شده را محاسبه می کند. | GetAccessControl |
یک فایل مشخص شده را به یک مکان جدید انتقال می دهد، و میتوان نام فایل جدید را تغییر داد | MoveTo |
یک فایل مشخص شده را باز می کند | Open |
FileStream فقط خواندنی را ایجاد می کند. | OpenRead |
یک StreamReader با رمزگذاری UTF8 ایجاد می کند که از یک فایل متنی موجود برای خواندن استفاده می کند. | OpenText |
FileStream فقط نوشتنی را ایجاد می کند. | OpenWrite |
محتویات یک فایل مشخص شده را با فایل مشخص شده توسط شیء FileInfo جایگزین می کند، فایل اصلی را پاک کرده و یک پشتیبان از فایل جایگزین ایجاد می کند. | Replace |
نوع رشته برگشت می دهد. | ToString |
مثال زیر نشان می دهد که چطور بایت ها را از یک فایل به صورت دستی بخوانید و سپس آنها را به یک رشته با استفاده از کدگذاری UTF8 تبدیل کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | //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 butes 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); |
همانطور که در کد بالا دیده اید، شما باید کد زیادی را برای خواندن / نوشتن یک رشته از FileSream بنویسید. همان عملیات خواندن / نوشتن را می توان به راحتی با استفاده از StreamReader و StreamWriter انجام داد.
مثال زیر نشان می دهد که چقدر کار کردن با StreamReader برای خواندن رشته ها از یک فایل آسان است:
1 2 3 4 5 6 7 8 9 10 | //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 جداگانه برای نوشتن در همان فایل ایجاد کنید، همانطور که در زیر نشان داده شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //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 برای خواندن / نوشتن مطالب از فایل فیزیکی استفاده کنید.