کار با فایل و مسیر
کار با فایل و مسیر
بخشی از آموزش جامع 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 ذخیره، بازیابی و به انتهای آن یادداشت جدید اضافه کند.
۱۰. جمعبندی
در این فصل، مبانی «کار با فایل و مسیر» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصلهای بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم میکند.