++VC و C++ ،C فایل ها در زبان برنامه نویسی

<!-- /* Font Definitions */ @font-face {font-family:Helvetica; panose-1:2 11 5 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tms Rmn"; panose-1:2 2 6 3 4 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Helv; panose-1:2 11 6 4 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"New York"; panose-1:2 4 5 3 6 5 6 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:System; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS 明朝"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Batang; panose-1:2 3 6 0 0 1 1 1 1 1; mso-font-alt:바탕; mso-font-charset:129; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:PMingLiU; panose-1:2 1 6 1 0 1 1 1 1 1; mso-font-alt:新細明體; mso-font-charset:136; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:"MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-alt:"MS ゴシック"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Dotum; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:돋움; mso-font-charset:129; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimHei; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:黑体; mso-font-charset:134; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:MingLiU; panose-1:2 1 6 9 0 1 1 1 1 1; mso-font-alt:細明體; mso-font-charset:136; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:Mincho; panose-1:2 2 6 9 4 3 5 8 3 5; mso-font-alt:明朝; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Gulim; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:굴림; mso-font-charset:129; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:Century; panose-1:2 4 6 3 5 7 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Angsana New"; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:"Cordia New"; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:Mangal; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:32768 0 0 0 0 0;} @font-face {font-family:Latha; panose-1:2 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1048576 0 0 0 0 0;} @font-face {font-family:Sylfaen; panose-1:1 10 5 2 5 3 6 3 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:16778883 0 512 0 13 0;} @font-face {font-family:Vrinda; panose-1:1 1 6 0 1 1 1 1 1 1; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Raavi; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Shruti; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Sendnya; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Gautami; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Tunga; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:"Estrangelo Edessa"; panose-1:3 8 6 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:"Arial Unicode MS"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Cambria Math"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:right; mso-pagination:widow-orphan; direction:rtl; unicode-bidi:embed; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} ins {mso-style-type:export-only; text-decoration:none;} span.msoIns {mso-style-type:export-only; mso-style-name:""; text-decoration:underline; text-underline:single;} span.msoDel {mso-style-type:export-only; mso-style-name:""; text-decoration:line-through; color:aqua;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0; mso-gutter-direction:rtl;} div.Section1 {page:Section1;} -->

 

Mohsen_mahyar@yahoo.com

 

84/10/ تاریخ تالیف: 9

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

 

.:: 2 ::.

VC++ و C++ ،C فایل در زبان های برنامه نویسی

هر فایل شامل مجموعه ای از داده های مرتبط به هم است، مانند داده های مربوط

به کلیه دانشجویان یک دانشگاه . فایل یک نوعی از ساختمان داده است که این نوع از

ساختمان داده، بر روی حافظه جانبی مثل دیس ک نوار و غیره تشکیل می شود . چ ون

اطلاعات موجود در روی حافظه جانبی با قطع جریان برق قطع اجرای برنامه و یا دلایلی

از این قبیل از بین نمی روند به دفعات زیادی مورد استفاده قرار می گیرند.

فایل داده می تواند هر دستگاهی مثل صفحه نمایش، صفحه کلید، چاپگر، ترمینال، دیسک، نوار و C در زبان برنامه نویسی

غیره باشد. داده ها ممکن است به چهار روش در فایل ذخیره شده سپس بازیابی شوند:

-1 داده ها، کاراکتر به کاراکتر در فایل نوشته شده سپس کاراکتر به کاراکتر از فایل خوانده شوند.

-2 داده ها به صورت رشته ای از کاراکترها در فایل نوشته شده سپس به صورت رشته ای از کاراکترها

دستیابی شوند.

-3 داده ها در حین نوشتن بر روی فایل، با فرمت خاصی نوشته شده سپس با همان فرمت خوانده شوند (

کاراکتری، عددی، رشته ای ).

-4 داده ها به شکل ساختمان (رکورد) بر روی فایل نوشته شده سپس بصورت ساختمان از فایل خوانده

شوند.

انواع فایل از نظر نوع اطلاعات

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

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

 

.:: 3 ::.

-1 اسکی 1 یا متن

-2 باینری 2

این دو روش ذخیره شدن داده ها، در موارد زیر با یکدگر تفاوت دارند:

-1 تعیین انتهای خط

-2 تعیین انتهای فایل

-3 نحوه ذخیره شدن اعداد بر روی دیسک

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

حافظه قرار می گیرند بر روی دیسک ذخیره می گردند.

به عنوان مثال، در فایل متنی عدد 256 سه بایت را اشغال می کند . زیرا هر رقم آن، به صورت یک کاراکتر در نظر

گرفته می شود . ولی در فا یل باینری این عدد در دو بایت ذخیره می شود. (چون عدد 256 یک عدد صحیح است و

اعداد صحیح در دو بایت ذخیره می شوند).

در فایل متنی کاراکتری که پایان خط را مشخص می کند، در حین ذخیره شدن بر روی دیسک، باید به

تبدیل شود و در حین خوانده شدن، عکس این عمل باید (Carriage Return Line Feed) CR/LF کاراکترهای

باید به کاراکترهای تعیین کننده پایان خط تبدیل شوند و بدیهی است که این CR/LF صورت گیرد : یعنی کاراکترهای

تبدیلات مستلزم صرف وقت است، لذا دسترسی به اطلاعات موجود در فایلهای متنی کندتر از فایل های باینری است.

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

1A توسط سیستم نگهداری می شود و انتهای فایل با توجه به طول فایل مشخص می گردد . در حالت متنی کاراکتر

به CTRL (در مبنای 16 ) و یا 26 (در مبنای 10 ) مشخص کننده انتهای فایل است . (این کاراکتر با فشار دادن کلید

ایجاد می شود). Z همراه

ASCII 1

Binary 2

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

.:: 4 ::.

می پردازیم: C++ یا C حال به بررسی توابع و دستورات مختلف فایل در زبان

باز کردن فایل

هر فایل قبل از اینکه بتواند مورد استفاده قرار گیرد باید باز شود، مواردی که حین بازکردن فایل مشخص می شود

عبارتند از:

-1 نام فایل

-2 نوع فایل از نظر ذخیره اطلاعات متنی یا باینری

-3 نوع فایل از نظر ورودی -خروجی ( آیا فایل فقط به عنوان ورودی است، آیا فقط به عنوان خروجی

است یا هم به عنوان ورودیست و هم به عنوان خروجی است).

یک فایل ممکن است طوری باز شود که فقط عمل نوشتن اطلاعات بر ر وی آن مجاز باشد. به چنین فایلی فایل خروجی

گفته می شود . اگر فایل طوری باز شود که فقط عمل خواندن اطلاعات از آن امکان پذیر باشد به چنین فایلی، فایل

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

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

قرار دارد و به صورت زیر به کار stdio.h استفاده می گردد . این تابع در فایل fopen() برای باز کردن فایل از تابع

می رود.

FILE *fopen (char *filename, *mode)

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

مشخص می کند که فایل چگونه باز شود (ورودی، خروجی و یا ورودی-خروجی). Mode

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

.:: 5 ::.

قرار داد در جدول زیر به طور کامل آورده شده است: mode مقادیری که می توان به جای عبارت

مفهوم MODE

را به عنوان ورودی باز می کند text فایلی از نوع r(rt)

را به عنوان خروجی باز می کنند text فایلی از نوع w(wt)

فایل را طوری باز می کند که بتوان اطلاعاتی را به آن اضافه کرد. a(at)

فایلی از نوع باینری را به عنوان ورودی باز می کند. rb

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

ab

فایل موجود از نوع باینری را طوری باز می کند که بتوان اطلاعات را به

انتهای آن اضافه نمود.

را به عنوان ورودی و خروجی باز می کند text فایل موجود از نوع r+(r+t)

را به عنوان ورودی و خروجی باز می کند text فایلی از نوع w+(w+t)

را به عنوان ورودی و خروجی باز می کند text فایل موجود از نوع a+(a+t)

فایل موجود از نوع باینری را به عنوان ورودی و خروجی باز می کند r+b

فایل موجود از نوع باینری را به عنوان ورودی و خروجی باز می کند w+b

a+b

فایل موجود از نوع باینری را به عنوان ورودی و خروجی باز می کند (این

فایل از قبل می تواند وجود داشته باشد).

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

FILE *fp; // تعریف یک اشاره گر از نوع فایل

fp=fopen("c:/data.txt","rt")

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

.:: 6 ::.

و از نوع فقط خواندنی ایجاد می شود. C بر روی درایو txt و با پسوند متنی data در مثال بالا فایلی به نام

برگردانده می شود که می توان به صورت زیر این عمل را NULL اگر فایل مورد نظر در شاخه موجود نباشد اشاره گر

چک نمود:

بستن فایل:

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

دارای الگوی زیر است:

int fclose(FILE *fp)

fclose(p) بسته شود. به عنوا ن مثال دستور fclose() به فایلی اشاره می کند که باید توسط تابع fp ، در الگوی بالا

به آن اشاره می کند می بندد. p فایلی را که

بست. این تابع به صورت زیر به fcloseall() اگر چندین فایل بطور همزمان در برنامه باز باشند می توان آنها را با تابع

کار می رود:

fcloseall();

if ((fp=fopen("A:data.txt","w"))==NULL

{

printf("can not open file \n");

}

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

.:: 7 ::.

در زیر به برخی از توابعی که در کار با فایل ها مورد استفاده قرار می گیرد آورده شده است:

نام تابع توضیح

fputc() یا Putc()

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

الگوی تابع:

int putc(int ch, FILE *fp)

مثال:

ch=getchar();

putc(ch,in);

fgetc() یا getc()

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

الگوی تابع:

int getc(FILE *fp)

مثال:

FILE *in;

ch=getc(in);

fputs()

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

الگوی تابع:

int puts(const char *str, FILE *fp)

fgets()

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

الگوی تابع:

char *fgets(char *str,int length,FILE *fp)

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

: آدرس سایت

.:: 8 ::.

rewind()

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

قرار دارد و به صورت زیر است: stdio.h آن را باز کنیم.الگوی این تابع در فایل

void rewind(FILE *fp)

ferror()

در حین انجام کار با فایل ممکن است خطایی رخ دهد . به عنوان مثال عدم

وجود فضای کافی برای ایجاد فایل، آماده نبودن دستگاهی که فایل باید در

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

استفاده از این تابع می توان از بروز چنین خطایی مطلع شوید . الگوی این تابع

قرار دارد و به صورت زیر است: stdio.h در فایل

int ferror(FILE *fp)

remove()

برای حذف فایلهای غیر ضروری می توان از این تابع استفاده کرد.

قرار دارد و به صورت زیر است: stdio.h الگوی این تابع در فایل

int remove(char *filename)

به نام فایلی اشاره می کند که باید ح ذف شود . اگر filename در الگوی فوق

عمل تابع با موفقیت انجام شود مقدار صفر وگرنه مقداری غیر از صفر برگردانده

خواهد شد.

fflush()

انتقال کلیه داده های موجود در بافرها به فایل

قرار دارد و به صورت زیر است: stdio.h الگوی این تابع در فایل

int fflush(FILE *fp)

برگردانده EOF اگر عمل تابع با موفقیت انجام شود مقدار صفر وگرنه مقدار

خواهد شد.

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

.:: 9 ::.

fprintf()

نوشتن داده ها با فرمت خاصی بر روی فایل

قرار دارد و به صورت زیر است: stdio.h الگوی این تابع در فایل

int fprintf(FILE *fp,"*control_string,…",char arg,…)

مثال:

fprintf(fp,"%c",ch);

fscanf()

خواندن داده با فرمت خاص از فایل مورد نطر

قرار دارد و به صورت زیر است: stdio.h الگوی این تابع در فایل

int fscanf(FILE *fp,"control_string,…",char arg,…)

مثال:

fscanf(fp,"%d",&num);

fwrite()

می باشد اما با این تفاوت که دارای سرعت بیشتری نسبت به fprintf() مانند

می باشد. fprintf()

قرار دارد و به صورت زیر است: stdio.h الگوی این تابع در فایل

int fwrite(void *buffer, int num_byte,int count,FILE *fp)

مثال:

Char table[20];

fwrite(table,sizeof(char),200,fp);

fread()

می باشد اما با این تفاوت که دارای سرعت بیشتری نسبت به fscanf() مانند

آن می باشد.

قرار دارد و به صورت زیر است: stdio.h الگوی این تابع در فایل

int fread(void *buffer, int num_byte,int count,FILE *fp)

VC++ و C++ ،C فایل ها در زبان برنامه نویسی

Mohsen_mahyar@yahoo.com

.:: 10 ::.

مثال:

Char arr[10

/ 1 نظر / 152 بازدید
matin

salam[خنثی]