فصل 25 از 40 درس 1 از 1

کار با فایل و مسیر

کار با فایل و مسیر

بخشی از آموزش جامع C# و .NET 10

محتوای درس کار با فایل و مسیر

APIهای System.IO امکان کار با فایل، پوشه، مسیر و Stream را فراهم می‌کنند. مدیریت Encoding، Resource و Path مستقل از سیستم‌عامل برای کد قابل حمل ضروری است.

۱. File و Directory

File عملیات سطح بالا روی فایل و Directory عملیات روی پوشه را ارائه می‌کنند.

مثال

Directory.CreateDirectory("data");
         File.WriteAllText("data/a.txt","Hello");
         Console.WriteLine(File.ReadAllText("data/a.txt"));

در این مثال، مفهوم «File و Directory» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۲. Path

Path برای ترکیب و تحلیل مسیرها استفاده می‌شود و از اتصال دستی مسیر با اسلش جلوگیری می‌کند.

مثال

string path=Path.Combine("data","products.json");
         Console.WriteLine(path);

در این مثال، مفهوم «Path» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۳. StreamReader و StreamWriter

برای خواندن و نوشتن متنی جریان‌محور مناسب‌اند و باید به‌درستی Dispose شوند.

مثال

using var w=new StreamWriter("log.txt");
         w.WriteLine("Started");

در این مثال، مفهوم «StreamReader و StreamWriter» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۴. Async File I/O

متدهای ReadAllTextAsync و WriteAllTextAsync برای جلوگیری از Block شدن Thread در I/O قابل استفاده‌اند.

مثال

await File.WriteAllTextAsync("a.txt","async");
         Console.WriteLine(await File.ReadAllTextAsync("a.txt"));

در این مثال، مفهوم «Async File I/O» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۵. Encoding

UTF-8 انتخاب رایج برای متن است و باید در تعامل با سیستم‌های خارجی Encoding به‌صورت صریح در نظر گرفته شود.

مثال

File.WriteAllText("utf8.txt","سلام",System.Text.Encoding.UTF8);

در این مثال، مفهوم «Encoding» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۶. مثال‌های عملی

string path = Path.Combine("data", "notes.txt");
         Directory.CreateDirectory("data");
         
         await File.WriteAllTextAsync(path, "Hello C#");
         string content = await File.ReadAllTextAsync(path);
         Console.WriteLine(content);

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

await using var writer = new StreamWriter("log.txt", append: true);
         await writer.WriteLineAsync($"{DateTime.UtcNow:o} Started");

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

۷. خطاهای رایج

• ساخت مسیر با اتصال دستی رشته‌ها

• فراموش کردن Dispose برای Streamها

• اعتماد به وجود فایل بدون بررسی یا مدیریت خطا

۸. نکات اجرایی

• نام‌ها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.

• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.

• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.

۹. تمرین عملی

برنامه دفترچه یادداشت بسازید که متن را در فایل UTF-8 ذخیره، بازیابی و به انتهای آن یادداشت جدید اضافه کند.

۱۰. جمع‌بندی

در این فصل، مبانی «کار با فایل و مسیر» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.