آموزش C

مباحث پایه زبان C

کار با فایل ها در زبان C – آموزش زبان C

  • دوشنبه ۲۳ مهر ۱۳۹۷
  • بازدید ۸,۲۳۷ نفر

تصویر c-file-io_4157 کار با فایل ها در زبان C - آموزش زبان C

کار با فایل ها در زبان C

در این فصل عملیات هایی (مانند ایجاد، نوشتن، خواندن و بستن) که با استفاده از زبان برنامه نویسی C می توان بر روی فایل های مختلف انجام داد را بررسی می کنیم. یک فایل دنباله ای از بایت ها می باشد و فرقی نمی کند که فایل باینری یا متنی باشد. زبان C توابع سطح بالا و همچنین سطح پایین (سطح سیستم عامل) را برای انجام عملیات های مختلف بر روی فایل ها در اختیار برنامه نویسان قرار می دهد. در این فصل شما یاد می گیرید که چگونه فایل ها را مدیریت کنید.

باز کردن فایل ها

شما می توانید برای ایجاد یک فایل و یا باز کردن فایلی که قبلا ایجاد شده است، از تابع fopen() استفاده کنید. زمانی که این تابع فراخوانی می شود، یک شیء از نوع FILE که شامل اطلاعات لازم برای مدیریت جریان (stream) فایل است، ایجاد می شود. الگوی این تابع را در زیر مشاهده می کنید:

در الگوی بالا، filename نام فایلی است که می خواهید بر روی آن کار کنید و mode هم نحوه رفتار این تابع با آن فایل را مشخص می کند. پارامتر دوم یعنی mode می تواند یکی از مقادیر زیر باشد:

ردیفتوضیحات
1r

یک فایل متنی موجود را با هدف خواندن باز می کند.

2w

یک فایل متنی را با هدف نوشتن باز می کند. اگر فایل موجود نباشد آن را ایجاد می کند. این حالت همیشه از ابتدای فایل شروع به نوشتن می کند.

3a

یک فایل متنی را برای نوشتن و در حالت اضافه کردن (appending) باز می کند. در این حالت اگر محتوای در فایل وجود داشته باشد، برنامه از انتهای محتوای فایل کار نوشتن را انجام می دهد. اگر فایل موجود نباشد، آن را ایجاد می کند.

4r+

یک فایل متنی را هم برای خواندن و هم برای نوشتن باز می کند.

5w+

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

6a+

یک فایل را هم برای نوشتن و هم برای خواندن باز می کند اگر فایل وجود نداشته باشد، آن را ایجاد می کند. در حالت، عملیات خواندن از ابتدای فایل شروع می شود ولی عملیات نوشتن از انتهای محتوای موجود شروع می شود.

اگر می خواهید فایل ها را به صورت باینری پردازش کنید، می توانید از mode های زیر به جای mode های ذکر شده در جدول فوق استفاده کنید:

بستن یک فایل

به منظور بستن جریان یک فایل باز شده در زبان برنامه نویسی C می توانید از تابع fclose() استفاده کنید. الگوی این تابع را در زیر مشاهده می کنید:

این تابع اگر موق شود فایل را ببندد، مقدار 0 باز میگرداند و در صورت عدم موفقیت، مقدار EOF باز میگرداند. این تابع در حقیقت اطلاعات مربوط به فایل که در بافر است را از بین می برد و آن را از حافظه خارج می کند. EOF یک ثابت است که در فایل هدر stdio.h تعریف شده است.

نوشتن در فایل

در زیر ساده ترین راه برای نوشتن یک کاراکتر در یک فایل را مشاهده می کنید:

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

به منظور نوشتن یک رشته خاتمه یافته با null می توانید از تابع fputs() استفاده کنید. در زیر الگوی این تابع را مشاهده می کنید:

پارامتر اول رشته مورد نظر و پارامتر دوم فایلی (یعنی اشاره گر فایل) که می خواهید یان رشته در آن نوشته شود. اگر عمل نوشتن موفقیت آمیز باشد مقدار صفر و در غیر این صورت EOF باز میگرداند.

یکی از توابع دیگری که برای نوشتن استفاده می شود، تابع fprinf() می باشد. در زیر الگوی این تابع را مشاهده می کنید:

مثال زیر نحوه استفاده از این تابع را نشان می دهد:

قبل از اجرا مثال بالا مطمئن شوید که پوشه tmp وجو دارد. اگر وجود نداشت آن را ایجاد کنید.

زمانی که کد بالا کامپایل و اجرا شود، ابتدا فایل test.txt را در مسیر مشخص شده ایجاد می کند و سپس با استفاده از دو تابع مختلف دو خط را درون فایل موجود در پوشه tmp می نویسد.

خواندن از فایل

دستور ساده زیر، ساده ترین راه برای خواندن یک کاراکتر از یک فایل است:

تابع fgetc() یک کاراکتر را از فایلی که به آن داده می شود می خواند و به عنوان خروجی باز میگرداند. در صورتی که در خوان از فایل مشکلی بوجود آید مقدار EOF باز میگرداند.

تابع زیر امکان خواندن یک رشته از یک فایل را فراهم می کند:

تابع fgets() به تعداد n – 1 کاراکتر از فایلی که به آن داده می شود، می خواند و در بافر buf قرار می دهد، سپس مقدار null را به منظور خاتمه دادن به رشته، به انتهای بافر buf اضافه می کند.

اگر تابع fgets() با یک کاراکتر خط جدید یا EOF رو به رو شود، عملیات خواندن را متوقف می کند و فقط کاراکتر خوانده شده تا قبل از خط جدید یا EOF باز گردانده می شوند.

همچنین می توانید از تابع fscanf() نیز به منظور خواندن یک رشته از فایل استفاده کنید. الگوی این تابع را در زیر مشاهده می کنید:

تابع fscanf() هنگامی که با اولین کاراکتر فضای خالی (space) مواجه شود، عمل خواندن را متوقف می کند. مثال زیر نحوه استفاده از توابع فوق را نشان می دهد:

زمانی که کد بالا توسط کامپایلر زبان C و اجرا شود، فایلی که در بخش نوشتن در فایل ایجاد شد را می خواند و محتوای زیر را تولید می کند:

توابع ورودی / خروجی باینری

در زبان C دو تابع وجود دارد که می توان از آن ها برای ورودی / خروجی های باینری استفاده کرد:

هر دو این توابع باید برای خواندن و یا نوشتن بلوک هایی از حافظه (معمولا آرایه ها یا ساختارها) استفاده شوند. به عبارت دیگر برای نوشتن محتویات یک آرایه یا ساختار درون یک فایل و همچنین برای خوان این محتویات از فایل توابع فوق استفاده می شوند.

ثبت نظر
ریفریش کنید!
نظرات کاربران (۰ مورد)

هیچ نظری ثبت نشده است