Stream در سی شارپ چیست؟
در زبان برنامه نویسی سی شارپ، معمولا از استریم ها (streams) برای خواندن و نوشتن روی فایل ها استفاده می شود. Stream یک لایه اضافی است که بین برنامه و فایل ایجاد می شود. Stream برای اطمینان از خواندن و نوشتن یکنواخت، روان و بدون مشکل فایل ها استفاده می شود.
استریم ها معمولاً هنگام خواندن داده ها از فایل های بزرگ استفاده می شوند. با استفاده از استریم ها، داده های فایل های بزرگ به تکه های کوچک تقسیم شده و به stream ارسال می شوند. سپس این تکه های داده را می توان از برنامه خواند.
دلیل تقسیم آن به تکه های کوچک به دلیل تأثیر عملکرد خواندن یک فایل بزرگ در یک شات است. اگر بخواهید داده ها را از یک فایل 100 مگابایتی در یک شات بخوانید، برنامه شما ممکن است متوقف شده، هنگ کند و ناپایدار شود. بهترین روش استفاده از استریم ها برای تجزیه فایل به تکه های قابل مدیریت است.
بنابراین هنگامی که یک عملیات نوشتن روی فایل انجام می شود، داده هایی که باید نوشته شوند، ابتدا در stream نوشته می شوند. داده ها سپس از stream در فایل نوشته می شوند. در مورد عملیات خواندن هم همینطور. در عملیات خواندن ابتدا داده ها از فایل به stream منتقل می شود. سپس داده ها از طریق stream از برنامه خوانده می شوند. بیایید به مثالی نگاه کنیم که چگونه می توانیم با استفاده از stream ها بخوانیم و بنویسیم.
در این آموزش، شما مفاهیم زیر را یاد خواهید گرفت:
1 - Stream Reader
2 - Stream Writer
Stream Reader
stream reader برای خواندن داده ها از یک فایل با استفاده از stream ها استفاده می شود. داده های فایل ابتدا در stream خوانده می شود. سپس برنامه داده ها را از stream می خواند.
برای مثال، فرض می کنیم که در درایو D فایلی به نام Example.txt داریم. این فایل یک فایل متنی ساده است و مطابق زیر زیر دارای 2 خط است.
Guru99 – .Net
Guru99 -C#
برای مثال ما یک برنامه کنسول ساده (Console application) ایجاد می کنیم و با File streams کار می کنیم.
بیایید به مثالی نگاه کنیم که چگونه می توانیم از stream ها برای خواندن داده ها از یک فایل استفاده کنیم. کد زیر را در فایل program.cs وارد کنید.
توضیح کد:
1 - ابتدا یک شیء stream reader را تعریف می کنیم. شی stream reader در سی شارپ برای تعریف یک stream از فایل به برنامه استفاده می شود. هر زمان که داده ها از فایل خوانده شوند، داده ها از فایل به stream منتقل می شوند. File.OpenText برای باز کردن فایل "Example.txt" در حالت یا مد فقط خواندنی استفاده می شود. سپس کنترل کننده فایل به شیء stream reader ارسال می شود.
2 - در مرحله بعد، یک متغیر موقت به نام "s" تعریف می کنیم که برای خواندن تمام داده ها از فایل استفاده می شود.
3 - سپس از متد stream reader به نام ReadLine برای خواندن هر خط از بافر stream استفاده می کنیم. وقتی این عملیات را انجام می دهیم، ابتدا هر خط از فایل به بافر منتقل می شود. سپس خط رشته از بافر به متغیر ‘s’ منتقل می شود. سپس محتویات رشته ‘s’ را در کنسول می نویسیم.
وقتی کد بالا ست شد و پروژه با استفاده از ویژوال استودیو اجرا شد، خروجی زیر را دریافت خواهید کرد.
با توجه به خروجی، می توانید ببینید که Stream Reader هر دو خط فایل را می خواند. در نهایت، خطوط رشته خوانده شده از stream به کنسول ارسال شد.
Stream Writer
stream writer برای نوشتن داده ها در یک فایل با استفاده از stream ها استفاده می شود. داده های برنامه ابتدا در stream نوشته می شود. پس از آن استریم داده ها را در فایل می نویسد. بیایید به مثالی نگاه کنیم که چگونه می توانیم از stream ها برای نوشتن داده ها از یک فایل استفاده کنیم. کد زیر را در فایل program.cs وارد کنید.
توضیح کد:
1 - ابتدا، یک شیء stream writer را تعریف می کنیم. شیء stream writer در C# برای تعریف یک stream استفاده می شود. سپس از stream برای نوشتن داده ها از برنامه در فایل استفاده می شود. هر زمان که داده ها نیاز به نوشتن داشته باشند، داده ها از برنامه به stream منتقل می شوند. دستور File.AppendText برای باز کردن فایل "Example.txt" در حالت ضمیمه (append mode) استفاده می شود. سپس کنترل کننده فایل به شیء stream writer ارسال می شود.
2 - ما از متد stream write به نام Writelineبرای نوشتن خط "Guru99 – ASP.Net" در stream استفاده می کنیم. از stream، این خط در فایل نوشته می شود.
3 - سپس پس از نوشتن روی فایل، stream writer را می بندیم. زمانی که فایل دیگر به قصد نوشتن مورد نیاز نیست، معمولاً بهتر است که کنترل کننده فایل (file handlers) را ببندید.
4 - در نهایت در حال خواندن مجدد محتویات فایل و نوشتن آن در لاگ کنسول هستیم. این برای بررسی این است که آیا خط روی فایل نوشته شده است یا خیر.
وقتی کد بالا ست شد و پروژه با استفاده از ویژوال استودیو اجرا شد، خروجی زیر را دریافت خواهید کرد.
از خروجی مشاهده می کنید که خط “Guru99 – ASP.Net” با موفقیت به فایل اضافه شده است. تمام 3 خط متن در کنسول قابل مشاهده است.
خلاصه مطالب بالا:
1 - استریم ها به عنوان یک سطح میانی بین برنامه و فایل استفاده می شوند.
2 - هر زمان که نیاز به خواندن داده ها از یک فایل باشد از StreamReader استفاده می شود.
3 - هر زمان که نیاز به نوشتن داده ها در یک فایل باشد از Streamwriter استفاده می شود.