کار با فایل ها

فایل چیست؟

برای ذخیره کردن دائمی اطلاعات از فایل استفاده می شود

دستور Open

فایل های تصادفی و ترتیبی هر دو با دستورOpen باز خواهد شد نوع باز کردن فایل به آرگومانهای دستور Open  بستگی دارد دستور open یک کانال(شناسای فایل) برای خواندن و نوشتن فایل باز می کند. هر دستور open  با یک شماره ارتباط دارد که از طریق آن فایل را شناسایی می کند . حالت (mod) باز شدن فایل-خواندن فایل ،نوشتن  یا هر دو نحوه انتقال اطلاعات بین فایل و کامپیوتر مشخص می کند.

 

دستور Open  دو آر گومان دائمی دارد که باید حتماً باشد :

1-نام فایل که شامل نام و پسوند آن است و هم می تواند آدرس هم در آن باشد مثل:"E:\project\file.txt"

2-شماره فایل وقتی فایلی باز می شد  برنامه دیگر هرگز از نام آن استفاده نمی کند و فقط با شماره فایل استفاده می کند

شکل ساده دستور Open  به این صورت است :

Open "namfaile.format"As #1

 

شکل کلی آن به این صورت است:

Open"FileName"[For Mode] [Access Restrivtion] [Lock Type] As-

[#] intfileNum [Len =intRecordLenght]

که ما به ترتیب هر کدام از آنها را توضیح می دهیم

 

حالت های فایل(For Mode)

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

آرگومان For Mode  (حالتهای باز شدن فایل) اجباری نیستند و اگر آن را ننویسیم حالت For random فرض خواهد شد به مثال زیر توجه کنید:

1.Open "computer.txt"for Random As #1

                                                                                                                                          2.Open "computer.txt"As #1 

در حقیقت مثال اول با دوم هیچ فرقی ندارد

شکل Open  به این صورت است

Open"نام فایل .فرمت"For Mode As # شماره فایل

حالات باز شدن (For Model)عبارتند از:

Append: یک فایل ترتیبی رابرای نوشتن از انتها باز می کند اگر فایلی وجود نداشته باشد آن را می سازد و نکته قابل توجه این حالت با حالات دیگر این است که اطلاعات قبلی خود را پاک نمی کند .

مثال:

Open"E:\vb6\book.txt"For Append As #1

Output: یک فایل ترتیبی را براي نوشتن باز می کند اگر فایل وجود نداشته باشد آن را می سازد اما محتویات قبلی فایل را پاک می کند و اطلاعات جدید را در آن فایل می نویسد

مثال:

Open"E:\vb6\book.txt"For Output As #1

Input: یک فایل ترتیبی را برای خواندن باز می کند

مثال:

Open"E:\vb6\book.txt"For Input As #1

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

 

Random: همانطور که در بالا گفتیم اگر ما For Mode هم انتخاب نکنیم ویژوال بیسیک حالت Random را فرض خواهد کرد این حالت یک فایل را برای خواندن و نوشتن تصادفی باز می کند در این حالت داده ها می تواند از هر نقطه فایل خوانده یا نوشته شوند.

 

محدود کردن دسترسی به فایل [Access Restrivtion]

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

شکل اول: دسترسی به Read  که فقط دسترسی به خواندن فایل را محدود می کند.

شکل دوم:دسترسی به Write که فقط دسترسی به خواندن فایل را محدود می کند.

شکل سوم : دسترسی به Read Write که هم خواندن و هم نوشتن را محدود می سازد.

قفل کردن فایل [Lock Type]

با استفاده از این آرگومان می توانید کاری کنید که در حین باز بودن یک فایل برنامه های دیگر نتوانند آنرا بخوانند یا در آن چیزی بنویسند که دارای 4 گزینه است :

1-Shared  دسترسی هم زمان به فایل مجاز است

2-قفل Lock Read با استفاده ازآن دیگران حق خواندن فایل را ندارند.

3-قفل Lock Write با استفاده ازآن دیگران حق نوشتن در فایل را ندارند.

4- قفل Lock Read Write با استفاده ازآن دیگران حق خواندن و نوشتن فایل را ندارند.

چگونه یک شماره فایل را تشخيص دهیم:

تابع Free File

اين تابع براي شماره فايل آزاد به كار مي رود و به صورت زير استفاده مي شود

FreeFile=(محدوده شماره فايل)

چنانچه محدوده شماره فايل ذكر نشود محدود شماره فايل را 1 تا 255 در نظر مي گيرد و گرنه محدود شماره فايل را 256 تا 511 در نظر مي گيرد به عنوان مثال:

Dim NumFi as Integer

NumFi=FreeFile

Open"Test.txt"For Output As #NumFi

اين دستور ، فايل Test.txt را به صورت خروجي بازكرده شماره آخرين فايل آزاد را به آن تخصيص مي دهد.

همان طور كه در مثال بالا ملاحظه مي شود، چنانچه در تابع FreeFile محدوده شماره فايل  ذكر نشود پرانتز را بايد حذف كرد.

تابع FreeFile را نمي توان به طور مستقيم در فرمان Open بكار برد.به عنوان مثال:

Open"Test.txt"For Output As #NumFi              درست نيست

 

بستن فايل ها

 

دستورClose

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

ساختمان دستور Close#

Close#شماره فایل

 

نوشتن در فايل ترتيبي

 

دستور#Print

تا قبل از این ما به شما چگونه باز کردن و بستن فایل را آموزش دادیم اما دستور Print# چه کار می کند ؟

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

 

ساختمان دستورPrint#

Print#شماره فايل ,اسامي فيلدها

شماره فايل: فايلي است كه قبلاً به صورت Output و يا Append باز شده است

اسمامي فيلدها : اطلاعاتي است كه بايد در فايل نوشته شود.اسامي فيلدها را با كاما از هم جدا مي كنند در اين فرمان فيلدها در هنگام نوشتن در فايل ، با كاما از هم جدا ميشوند و فيلدهاي رشته اي در نقل قول قرار مي گيرند( مانند TextBox)

 

 

مثال: دو عدد Text با نام هاي Text1وText2 بر روي فرم تان قرار دهيد و يك Command بر روي فرم خود بگذاريد و كد زير را در  command1 قرار دهيد:

Dim Filenum As integer

Filenum=FreeFile

Open"C:\book.dat"For Append As #Filenum

Print#Filenum,text1,text2

Close#Filenum

بعد از وارد كردن اطلاعات در text1وtext2 و زدن بر command تان به آدرس C:\book.dat برويد و آن فابل را مشاهده كنيد . حتماً اطلاعاتي را كه در Text1وtext2 وارد كرده بوديد را در آن خواهيد ديد.

 

آیتم های دستورPrint# (OutputListe)

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

تذکر:از هر دو تابع هم زمان نمی توانید استفاده کنید

 

توابع                                                                      توضیح

Spc()                                  به مقدار داخل () بین خروجی ها فاصله می اندازد

Tab()                محل چاپ خروجی در فایل ; عدد داخل پرانتز شماره ستون را مشخص میکند.

 CharPos با این آیتم دستورPrint  بعدی ادامه همان خط قرار می گیرد در صورتی که وجود نداشته باشد             

                                           دستور Print بعدی ابتدای خط بعدی قرار می گیرد.

Expression                                     عبارت عددی یا رشته ای.

 

مثال:

 

Dim NumFi As Iinteger

NumFi=FreeFile

Open"test.txt"For Append As #NumFi

Print#NumFi,Spc(10),Text1.text

Close#NumFi

 

 

مثال های نمونه

 

مثال:این مثال محتویات داخل Text1 را در فایل text.txt که در درایو E قرار دارد ذخیره می کند

Private Sub Command1_Click()

Dim NumFi As Integer

NumFi=FreeFile

Open"E:\test.txt"For Append As #NumFi

Print#NumFi,Text1.text

                                                                                                                                                                  Close#NumFi

End Sub

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

این برنامه معدل شما را محاسبه می کند و در فایل قرار می دهد و همچنین مکان ظاهر شدن خروجی را با فاصله 10 از ابتدای هر خط تعیین کرده است:

Private Sub Command1_Click()

Dim a, b, result As Single

Dim num As Integer

a = Val(Text1)

b = Val(Text2)

result = (a + b * 2) / 3

num = FreeFile

Open "E:\NewFile.txt" For Append As #num

Print #num,Spc(10),result

Close #num

End Sub

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

این برنامه اعداد 2 تا 10 را دو تا دو تا ، در فایل به صورت افقی می نویسد

Private Sub Command1_Click()

Dim num As Integer

Dim shomar As Integer

shomar = FreeFile

Open "E:\Javad.txt" For output As #shomar

For num = 2 To 10 Step 2

Print #shomar, num;

Next num

Close #shomar

End Sub

 

حالا به آدرس E:\javad.txt برويد و آن فايل(javad) را باز كنيد اعداد10  8 6  4  2 را به صورت افقي مشاهده خواهيد كرد

حالا اگر ما به خواهیم خروجی برنامه هایمان را در خود برنامه ، در ویژوال بیسیک بیینم می توانیم از ابزارMicrusoft Rich Textbox control 6.0 استفاده کنیم اگر این ابزار در جعبه ابزار شما نبود باید آن را وارد کنید که آنرا در درس های پیش گفته ام اما دوباره یادآوری می کنم.

یادآوری: ابتدا وارد منوProject شوید بعد بر روی گزینه Components بروید و کلیک کنید یا می توانید از کلید میانبر Ctrl+T استفاده کنید و به دنبال Micrusoft Rich Textbox control 6.0 بگردید وقتی آنرا پیدا کرید آنرا با علامت تیک مشخص کنید و بر روی Ok کلیک کنید.

بعد از اینکه ابزار Rich Textbox را وارد جعبه ابزار خود کردید یک  Rich Textbox بر روی فرم خود بکشید و در Form Load این را تایپ کنید:

Private Sub Form_Load()

RichTextBox1.FileName = "نام فایل"

End Sub

پس برنامه قبلی ما که نوشتن اعداد 2 تا 10 به صورت دوتادوتا رااگر بخواهیم درفرم برنامه خود در Rich Textbox نمایش دهیم باید اینگونه بنویسیم:

Private Sub Form_Load()

RichTextBox1.FileName = "E:\Javad.txt"

End Sub

 

نوشتن در فايل ترتيبي قسمت دوم( اين بار با دستور Write#)

براي نوشتن در يكه فايل ترتيبي كه توسط فرمان Open به صورت Output يا Append باز شده باشد، از فرمان Write#ياPrint# استفاده ميشود.كه فرمان Print# را به شما آموزش داده ايم.

فرمان Write# به صورت زير بكار مي رود:

Write#شماره فايل ,اسامي فيلدها

شماره فايل: فايلي است كه قبلاً به صورت Output و يا Append باز شده است

اسمامي فيلدها : اطلاعاتي است كه بايد در فايل نوشته شود.اسامي فيلدها را با كاما از هم جدا مي كنند در اين فرمان فيلدها در هنگام نوشتن در فايل ، با كاما از هم جدا ميشوند و فيلدهاي رشته اي در نقل قول قرار مي گيرند.

مثال:دو عدد Text با نام هاي Text1وText2 بر روي فرم تان قرار دهيد و يك Command بر روي فرم خود بگذاريد و كد زير را در آن قرار دهيد :

Dim Filenum As integer

Filenum=FreeFile

Open"C:\book.dat"For Append  As #Filenum

Write#Filenum,text1,text2

Close#Filenum

بعد از وارد كردن اطلاعات در text1وtext2 و زدن بر command تان به آدرس C:\book.dat برويد و آن فابل را مشاهده كنيد . حتماً اطلاعاتي را كه در Text1وtext2 وارد كرده بوديد را در آن خواهيد ديد.چون

اين دستور ، فايل book.dat را به صورت خروجي بازكرده اطلاعات ركورد آن را مي نويسد.

 

تفاوت هاي فرمان Write با Print :

اين است كه فرمانWrite باعث ميشود كه فيلدها در فايل ترتيبي با كاما از هم جدا شوند ولي در در فرمان Print# چنانچه فيلدها با كاما از يكديگر جدا شوند ، در هنگام نوشتن در فايل ، بين فيلدها 14 فاصله قرار مي گيرد.

 

خواندن ازفايل ترتيبي

دستور Input#

اين فرمان براي خواندن اطلاعات از فايل مورد استفاده قرار مي گيرد و به صورت زير بكار مي رود:

Input#شماره فايل ,متغير رشته اي

 

متغير رشته اي: متغيري است كه اطلاعات خوانده شده از فايل ترتيبي بايد در آن قرار گيرد

شماره فايل،شماره فايلي كه به صورت Inputباز شده است و اسامي فيلدها،ليستي از متغيرها هستند كه اطلاعات خوانده شده در آن قرارمي گيرد.

اسامي فيلدها بايد به ترتيب با ليست متغيرهايي كه در هنگام نوشتن اطلاعات در فايل استفاده شده اند، همنوع باشند.

در اين دستور چنانچه فيلدها در هنگام خواندن كمتر از تعداد فيلدهايي باشد كه تشكيل يك ركورد را مي دهند،فيلدهاي بعدي در فرمان Input# بعدي ظاهر خواهند شد.ولي چنانچه تعداد فيلدهايي كه در خواندن به كار مي رودند، بيشتر از تعداد فيلدهاي تشكيل دهنده يك ركورد باشد، به تعداد لازم از ركورد بعدي خوانده مي شوند

مثال مهم: برنامه زير اطلاعات را داخل Tex1وtext2 ر با استفاده از دستورWrite# داخل فايل مي نويسد وبا استفاده از دستور Input آن اطلاعات خوانده مي شود و داخل Text3وText4 نمايش داده مي شود:

4 عدد Textbox و دو عدد CommnaButton بر رو ي فرم برنامه تان قرار دهيد حال Commad1 دابل كليك كنيد و كد زير را در آن قرار دهيد:اين دكمه كار نوشتن درفايل را مي كند (با استفاده از دستورWrite#)

filenum = FreeFile

Open "C:\book.dat" For Output As #filenum

Write #filenum, Text1, Text2

Close #1

 

در Command2 دابل كليك كنيد و كد زير را در آن قرار دهيد:اين دكمه اطلاعات داخل فايل را مي خواند و به شما داخل Text3وText4 نمايش مي دهد(با استفاده از دستور #Input)

filenum = FreeFile

Open "C:\book.dat" For Input As #filenum

Do While Not EOF(filenum)

Input #filenum, G, f

Text3.Text = G

Text4.Text = f

Exit Do

Loop

Close #1

 

دستورات داخل Command2 ، فايلي را به صورت ورودي باز كرده اطلاعات يك ركورد آن را مي خواند.

 

دستور #Line Input

اين دستور براي خواندن يك سطر از فايل ترتيبي استفاده ميشود و به صورت زير بكار مي رود:

 

Line Input#شماره فايل ,متغير رشته اي

 

متغير رشته اي متغيري است كه اطلاعات خوانده شده از فايل ترتيبي بايد در آن قرار گيرد

 

دستور EOF

اين تابع براي تست شرط پايان فايل بكار مي رود .چنانچه اشاره گر فايل به انتهاي آن رسيده باشد اين تابع قدار true و گرنه False را بر مي گرداند اين تابع به صورت زير به كار مي رود.

EOF شماره فايل

مثال : دستور زير تعداد ركوردهاي فايل را شمرده و در label1 چاپ مي كند:

Open "book.dat"For input As #1

Line1=0

Do while Not EOF (1)

Line Input #1,A$

Loop

Label1.caption=Line1

 

برنامه هاي مديريت فايل و پوشه:

 

فرمان MkDir

 با استفاده از اين فرمان مي توانيد پوشه اي را ايجاد كنيد.

اين فرمان به صورت زير به كار مي رود:

MkDir("آدرس ونام پوشه اي بايد ايجاد شود")

مثال:

MkDir("C:\shakhsi")

اين دستور يك پوشه با نام shakhsi در درايو C ايجاد مي كند.

 

فرمان Name

اين فرمان براي تغيير نام فايل هاي موجود در ديسك استفاده ميشود و به صورت زير به كار مي رود:

اين فرمان به صورت زير به كار مي رود:

 

Name "آدرس و نام فايل قبلي" As "نام فايل جديد"

در هنگام استفاده از اين دستور بايد به نكات زير توجه كرد:

1-فايل بسته باشد .

2-فايل اصلي و فايل تغيير نام يافته روي يك درايو قرار داشته باشد.

3-از اين فرمان نمي توان براي انتقال پوشته استفاده كرد.

مثال :

Name "C:\book.txt" As "mark.txt"

فرمانRmDir

با استفاده از اين فرمان مي توان پوشه اي را حذف كرد .

براي حذف پوشه بايد دو شرط را دارا باشد 1:پوشه خالي باشد 2:پوشه فعلي نباشد

فرمان RmDir به صورت زير به كار مي رود:

RmDir("آدرس و نام پوشه")

مثال:

RmDir("E:\file)

فرمان Kill

با استفاده از اين فرمان مي توان فايل يا فايل هاي موجود در بر روي ديسك را حذف كرد.

اين فرمان به صورت زير بكار مي رود:

Kill("آدرس ونام فايل يا فايل ها")

مثال دستور زير فايل هايي كه پسوند txt دارند را حذف مي كند:

 

Kill("*.txt")

 

 

 

 

 

نویسنده : محمد جواد شخصی خدابخش

تاریخ :30/12/1388 شمسی     2010 February 20 میلادی

ایمیل :mjshakhsi@yahoo.com

وبلاگ: http://www.shakhsi7270.blogfa.com

 

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