streamReader و streamWriter در #c
شناسه پست: 2006
بازدید: 1482

حالا وقتشه که کار با فایلها در #c را یاد بگیریم. برای این منظور، در این مقاله ما دو کلاس StreamWriter و StreamReader را پوشش میدهیم.

این مقاله، سرفصلی از دوره آموزشی زیر میباشد:

اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک مبانی #c کلیک کنید.

اگر میخواهید سورس کد مثالهای این مقاله را دانلود کنید بر روی لینک سورس کد StreamReader و StreamWriter کلیک کنید.

کلاسهای StreamReader و StreamWriter، کار خواندن و نوشتن بر روی یک فایل را انجام میدهند. هر دوی این کلاسها همچون خیلی از کلاسهای دیگر برای کار با فایلها و دایرکتوری ها در فضای نام System.IO موجود میباشند.

ما در این مقاله، قسمتهای زیر را پوشش میدهیم:

ایجاد آبجکتها برای StreamWriter و StreamReader

برای ایجاد آبجکتها برای کلاسهای StreamReader و StreamWriter باید از initialization  استاندارد برای reference data Type ها استفاده کنیم. ما از چند طریق میتوانیم این initialization را انجام دهیم. اما متداولترین آن، ارائه آدرس فایل مورد نظر است:

همانطور که در کد بالا مشاهده می کنیم ، می توانیم مسیر فایل مورد نظر را به صورت نسبی یا مطلق ارائه دهیم. اگر ما یک مسیر نسبی (فقط نام فایل به همراه پسوند) را ارائه دهیم، ویژوال استودیو، فایل را از داخل پوشه projectName/bin/debug در نظر میگیرد.

متدهای StreamReader

StreamReader دارای متدهای زیادی برای کار با فایلها است، اما ما فقط به چند تا از آنها اشاره میکنیم.

متد ()Read، علامت بعدی در فایل را به عنوان یک عدد صحیح برمیگرداند یا اگر به انتهای فایل رسیده باشد 1- برمیگرداند. ما می توانیم از تبدیل صریح (cast) برای تبدیل آن عدد صحیح به نوع char استفاده کنیم:

متد ()ReadLine، کل خط را به عنوان یک رشته برمیگرداند. اگر به انتهای فایل رسیده باشیم null برمیگرداند:

متد ()ReadToEnd، کل فایل را در قالب یک رشته برمیگرداند. اگر چیزی برای خواندن وجود نداشته باشد در نتیجه، رشته خالی برمیگرداند.

متد ()Peek، کاراکتر بعدی در فایل را چک میکند. اگر چیزی پیدا نکند 1- برمیگرداند:

متدهای StreamWriter

دوتا از مهمترین متدها برای کلاس StreamWrite، متد Write() و ()WriteLine است. با متد ()Write، ما بدون اینکه به خط بعدی برویم یک خط داخل فایل مینویسیم. با متد ()WriteLine، یک خط داخل فایل مینویسیم و به خط بعدی میرویم.

این خیلی مهم است که بعد از اینکه کارمان با ابجکتهای  reader یا writer به اتمام رسید، متد ()Close را فراخوانی کنیم.

مثال 1: یک برنامه بنویسید که 5 عدد تصادفی از 1 تا 100 را در فایلی به نام numbers.txt بنویسد. سپس تمام اعداد را از همان فایل خوانده، آنها را چاپ کند و سپس بزرگترین آنها را نیز چاپ نماید:

همانطور که میبینید ما باید از متد Close برای بستن آبجکتهای reader و writer استفاده کنیم. اما بهترین راه برای انجام این کار، استفاده از بلاک using میباشد.

بلاک Using

بلاک using کمک میکند تا resource مان را مدیریت کنیم. این یک scope را مشخص می کند که ما در آن از resource خود استفاده می کنیم و هنگامی که آن scope را ترک کنیم ، resource مدیریت می شود.

برای استفاده از بلاک using، ما باید کلمه کلیدی using را قرار دهیم، resource را داخل پرانتز ایجاد کنیم و سپس scope بلاک using را با کروشه باز و بسته تعریف کنیم:

بنابراین ما میتوانیم متدمان از مثال قبلی را مجددا بازنویسی کنیم:

در این مثال ، ما از متد Close استفاده نمی کنیم زیرا به محض اینکه اجرا از بدنه بلاک using خارج شود، آبجکت StreamReader خودش مدیریت می شود.

نتیجه گیری

این هم از مبحث فایلها. حالا شما از دانش خوبی برای کار با فایلها در #c برخوردارید.

در مقاله بعدی، ما یاد میگیرم که چطور از کلاسهای File و Directory برای اداره کردن فایلها در #c استفاده کنیم.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید